XPush 一個輕量級、可插拔的Android消息推送框架修壕。一鍵集成推送(極光推送愈捅、友盟推送、華為慈鸠、小米推送等)蓝谨,提供有效的保活機(jī)制青团,支持推送的拓展譬巫,充分解耦推送和業(yè)務(wù)邏輯,解放你的雙手督笆!

XPush

項目地址

一個輕量級芦昔、可插拔的Android消息推送框架。一鍵集成推送(極光推送娃肿、友盟推送咕缎、華為、小米推送等)料扰,提供有效的逼竞溃活機(jī)制,支持推送的拓展晒杈,充分解耦推送和業(yè)務(wù)邏輯嫂伞,解放你的雙手!

在提issue前,請先閱讀【提問的智慧】帖努,并嚴(yán)格按照issue模板進(jìn)行填寫撰豺,節(jié)約大家的時間。

在使用前拼余,請一定要仔細(xì)閱讀使用說明文檔,重要的事情說三遍V3谩!姿搜!

在使用前,請一定要仔細(xì)閱讀使用說明文檔,重要的事情說三遍@υ鳌>斯瘛!

在使用前躲惰,請一定要仔細(xì)閱讀使用說明文檔,重要的事情說三遍V路荨!础拨!


特征

  • 集成方便氮块。只需幾行代碼即可實現(xiàn)推送的集成,目前已經(jīng)提供極光诡宗、友盟等推送渠道滔蝉,除此之外還可以根據(jù)自己的需要進(jìn)行擴(kuò)展。

  • 兼容性強(qiáng)塔沃。目前已完美支持Android 9.0蝠引。

  • 功能強(qiáng)大。支持推送相關(guān)的注冊蛀柴、注銷螃概,標(biāo)簽的增加、刪除鸽疾、獲取吊洼,別名的綁定、解綁制肮、獲取冒窍,推送的連接狀態(tài)獲取等操作,并能返回響應(yīng)的結(jié)果弄企;支持接收推送通知超燃、通知的點(diǎn)擊事件、自定義消息等推送類型拘领。

  • 統(tǒng)一的消息訂閱意乓。框架提供了統(tǒng)一的消息訂閱渠道,無論你使用了何種推送方式届良,都可以在任何地方進(jìn)行推送消息的訂閱和取消訂閱笆凌,方便消息的接收和處理。

  • 支持增加消息過濾器士葫。類似OkHttp中的攔截器乞而,可以對接收的消息進(jìn)行全局過濾,過濾出那些我們真正需要的推送消息慢显。

  • 提供有效的弊δ#活機(jī)制。保證接入XPush的應(yīng)用消息推送的到達(dá)率和穩(wěn)定性荚藻,這也是很多推送框架所做不到的屋灌。

組成結(jié)構(gòu)

本框架借鑒了OnePush(目前已不維護(hù)了)中的部分思想,加之我3年消息推送的經(jīng)驗应狱,形成了如下幾個部分:

  • 消息推送客戶端IPushClient:主要提供消息推送平臺的主要API共郭。

  • 消息推送事件轉(zhuǎn)發(fā)器IPushDispatcher:主要用于將第三方的消息推送事件轉(zhuǎn)發(fā)為XPush可識別的事件。

  • 消息推送接收器IPushReceiver:統(tǒng)一接收IPushDispatcher轉(zhuǎn)發(fā)過來的事件疾呻,是事件的接收中心除嘹。

  • 推送消息的被觀察者IMessageObservable:主要負(fù)責(zé)管理推送消息的訂閱和轉(zhuǎn)發(fā)。

  • 推送消息的過濾策略IMessageFilterStrategy:主要負(fù)責(zé)推送消息的過濾處理和管理岸蜗。

以上5個組成部分可以根據(jù)你自身的業(yè)務(wù)需求進(jìn)行自定義尉咕。

消息推送流程

在后臺發(fā)出一則推送消息后:

第三方推送平臺 --- (消息) ---> 第三方推送平臺內(nèi)部的接收消息的Receiver --->(重寫其接收的方法)---> IPushDispatcher ---> (轉(zhuǎn)發(fā)消息內(nèi)容為XPushMsg/XPushCommand)---> IPushReceiver ---> (如不使用XPushManager提供的消息管理,這里直接結(jié)束)

    【使用XPushManager提供的消息管理】:---IPushReceiver---> XPushManager -----> IMessageFilterStrategy --->(對消息進(jìn)行過濾處理)---> IMessageObservable ---> (消息轉(zhuǎn)發(fā)到具體訂閱的地方)

為什么要做這個項目

做過Android消息推送的人都知道散吵,Android不僅設(shè)備碎片化嚴(yán)重龙考,推送平臺也是五花八門的。早在2017年工信部就號召所有的廠商來制定統(tǒng)一的Android消息推送平臺矾睦,可到現(xiàn)在也沒有下文(究其原因還是這其中的利益太大了晦款,誰也不想妥協(xié))。

可是我們也不能將希望全都寄托在這個完全沒有定數(shù)的事件上枚冗,代碼終歸要寫缓溅,功能終歸要上,與其受制于人赁温,不如自己革命坛怪,搞一個自己能控制的消息推送全平臺解決方案來得靠譜。

之前在QQ交流群里一直有人希望我開源一個消息推送框架股囊,其實我在上一家公司的時候就寫了一個推送框架袜匿,只不過捆綁業(yè)務(wù)太深,加之避開泄密之嫌稚疹,也就沒有開源的必要居灯。此次的推送框架完全是重新寫了一個,加之全新的設(shè)計,會使框架更加通用怪嫌,靈活义锥。


快速集成指南

添加Gradle依賴

1.先在項目根目錄的 build.gradle 的 repositories 添加:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

2.添加XPush主要依賴:

dependencies {
  ...
  //推送核心庫
  implementation 'com.github.xuexiangjys.XPush:xpush-core:1.0.0'
  //推送保活庫
  implementation 'com.github.xuexiangjys.XPush:keeplive:1.0.0'
}

3.添加第三方推送依賴(根據(jù)自己的需求進(jìn)行添加岩灭,當(dāng)然也可以全部添加)

dependencies {
  ...
  //選擇你想要集成的推送庫
  implementation 'com.github.xuexiangjys.XPush:xpush-jpush:1.0.0'
  implementation 'com.github.xuexiangjys.XPush:xpush-umeng:1.0.0'
  implementation 'com.github.xuexiangjys.XPush:xpush-huawei:1.0.0'
  implementation 'com.github.xuexiangjys.XPush:xpush-xiaomi:1.0.0'
}

初始化XPush配置

1.注冊消息推送接收器拌倍。方法有兩種,選其中一種就行了噪径。

  • 如果你想使用XPushManager提供的消息管理苹祟,直接在AndroidManifest.xml中注冊框架默認(rèn)提供的XPushReceiver苦丁。當(dāng)然你也可以繼承XPushReceiver葫掉,并重寫相關(guān)方法款违。

  • 如果你想實現(xiàn)自己的消息管理舆乔,可繼承AbstractPushReceiver類领猾,重寫里面的方法跳座,并在AndroidManifest.xml中注冊杯巨。

    <!--自定義消息推送接收器-->
    <receiver android:name=".push.CustomPushReceiver">
        <intent-filter>
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_CONNECT_STATUS_CHANGED" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION_CLICK" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_MESSAGE" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_COMMAND_RESULT" />

            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>

    <!--默認(rèn)的消息推送接收器-->
    <receiver android:name="com.xuexiang.xpush.core.receiver.impl.XPushReceiver">
        <intent-filter>
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_CONNECT_STATUS_CHANGED" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_NOTIFICATION_CLICK" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_MESSAGE" />
            <action android:name="com.xuexiang.xpush.core.action.RECEIVE_COMMAND_RESULT" />

            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>

注意珍德,如果你的Android設(shè)備是8.0及以上的話练般,靜態(tài)注冊的廣播是無法正常生效的,解決的方法有兩種:

  • 動態(tài)注冊消息推送接收器

  • 修改推送消息的發(fā)射器

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    //Android8.0靜態(tài)廣播注冊失敗解決方案一:動態(tài)注冊
    XPush.registerPushReceiver(new CustomPushReceiver());

    //Android8.0靜態(tài)廣播注冊失敗解決方案二:修改發(fā)射器
    XPush.setIPushDispatcher(new Android26PushDispatcherImpl(CustomPushReceiver.class));
}

2.在AndroidManifest.xml的application標(biāo)簽下锈候,添加第三方推送客戶端實現(xiàn)類.

需要注意的是薄料,這里注冊的PlatformNamePlatformCode必須要和推送客戶端實現(xiàn)類中的一一對應(yīng)才行。

<!--name格式:XPush_[PlatformName]_[PlatformCode]-->
<!--value格式:對應(yīng)客戶端實體類的全類名路徑-->

<!--如果引入了xpush-jpush庫-->
<meta-data
    android:name="XPush_JPush_1000"
    android:value="com.xuexiang.xpush.jpush.JPushClient" />

<!--如果引入了xpush-umeng庫-->
<meta-data
    android:name="XPush_UMengPush_1001"
    android:value="com.xuexiang.xpush.umeng.UMengPushClient" />
    
<!--如果引入了xpush-huawei庫-->
<meta-data
    android:name="XPush_HuaweiPush_1002"
    android:value="com.xuexiang.xpush.huawei.HuaweiPushClient" />

<!--如果引入了xpush-xiaomi庫-->
<meta-data
    android:name="XPush_MIPush_1003"
    android:value="com.xuexiang.xpush.xiaomi.XiaoMiPushClient" />

3.添加第三方AppKey和AppSecret.

這里的AppKey和AppSecret需要我們到各自的推送平臺上注冊應(yīng)用后獲得泵琳。注意如果使用了xpush-xiaomi,那么需要在AndroidManifest.xml添加小米的AppKey和AppSecret(注意下面的“\ ”必須加上摄职,否則獲取到的是float而不是String,就會導(dǎo)致id和key獲取不到正確的數(shù)據(jù))获列。

<!--極光推送靜態(tài)注冊-->
<meta-data
    android:name="JPUSH_CHANNEL"
    android:value="default_developer" />
<meta-data
    android:name="JPUSH_APPKEY"
    android:value="a32109db64ebe04e2430bb01" />

<!--友盟推送靜態(tài)注冊-->
<meta-data
    android:name="UMENG_APPKEY"
    android:value="5d5a42ce570df37e850002e9" />
<meta-data
    android:name="UMENG_MESSAGE_SECRET"
    android:value="4783a04255ed93ff675aca69312546f4" />
    
<!--華為HMS推送靜態(tài)注冊-->
<meta-data
    android:name="com.huawei.hms.client.appid"
    android:value="101049475"/>

<!--小米推送靜態(tài)注冊谷市,下面的“\ ”必須加上,否則將無法正確讀取-->
<meta-data
    android:name="MIPUSH_APPID"
    android:value="\ 2882303761518134164"/>
<meta-data
    android:name="MIPUSH_APPKEY"
    android:value="\ 5371813415164"/>

4.在Application中初始化XPush

初始化XPush的方式有兩種击孩,根據(jù)業(yè)務(wù)需要選擇一種方式就行了:

  • 靜態(tài)注冊
/**
 * 靜態(tài)注冊初始化推送
 */
private void initPush() {
    XPush.debug(BuildConfig.DEBUG);
    //靜態(tài)注冊迫悠,指定使用友盟推送客戶端
    XPush.init(this, new UMengPushClient());
    XPush.register();
}
  • 動態(tài)注冊
/**
 * 動態(tài)注冊初始化推送
 */
private void initPush() {
    XPush.debug(BuildConfig.DEBUG);
    //動態(tài)注冊,根據(jù)平臺名或者平臺碼動態(tài)注冊推送客戶端
    XPush.init(this, new IPushInitCallback() {
        @Override
        public boolean onInitPush(int platformCode, String platformName) {
            String romName = RomUtils.getRom().getRomName();
            if (romName.equals(SYS_EMUI)) {
                return platformCode == HuaweiPushClient.HUAWEI_PUSH_PLATFORM_CODE && platformName.equals(HuaweiPushClient.HUAWEI_PUSH_PLATFORM_NAME);
            } else if (romName.equals(SYS_MIUI)) {
                return platformCode == XiaoMiPushClient.MIPUSH_PLATFORM_CODE && platformName.equals(XiaoMiPushClient.MIPUSH_PLATFORM_NAME);
            } else {
                return platformCode == JPushClient.JPUSH_PLATFORM_CODE && platformName.equals(JPushClient.JPUSH_PLATFORM_NAME);
            }
        }
    });
    XPush.register();
}

如何使用XPush

1巩梢、推送的注冊和注銷

  • 通過調(diào)用XPush.register()创泄,即可完成推送的注冊。

  • 通過調(diào)用XPush.unRegister()括蝠,即可完成推送的注銷鞠抑。

  • 通過調(diào)用XPush.getPushToken(),即可獲取消息推送的Token(令牌)忌警。

  • 通過調(diào)用XPush.getPlatformCode()搁拙,即可獲取當(dāng)前使用推送平臺的碼。

2、推送的標(biāo)簽(tag)處理

  • 通過調(diào)用XPush.addTags()感混,即可添加標(biāo)簽(支持傳入多個)端幼。

  • 通過調(diào)用XPush.deleteTags(),即可刪除標(biāo)簽(支持傳入多個)弧满。

  • 通過調(diào)用XPush.getTags()婆跑,即可獲取當(dāng)前設(shè)備所有的標(biāo)簽。

需要注意的是庭呜,友盟推送目前暫不支持標(biāo)簽的獲取滑进,華為推送不支持標(biāo)簽的所有操作,小米推送每次只支持一個標(biāo)簽的操作募谎。

3扶关、推送的別名(alias)處理

  • 通過調(diào)用XPush.bindAlias(),即可綁定別名数冬。

  • 通過調(diào)用XPush.unBindAlias()节槐,即可解綁別名。

  • 通過調(diào)用XPush.getAlias()拐纱,即可獲取當(dāng)前設(shè)備所綁定的別名铜异。

需要注意的是,友盟推送目前暫不支持別名的獲取秸架,華為推送不支持別名的所有操作揍庄。

4、推送消息的接收

  • 通過調(diào)用XPushManager.get().register()方法东抹,注冊消息訂閱MessageSubscriber蚂子,即可在任意地方接收到推送的消息。

  • 通過調(diào)用XPushManager.get().unregister()方法缭黔,即可取消消息的訂閱食茎。

這里需要注意的是,消息訂閱的回調(diào)并不一定是在主線程馏谨,因此在回調(diào)中如果進(jìn)行了UI的操作董瞻,一定要確保切換至主線程。下面演示代碼中使用了我的另一個開源庫XAOP,只通過@MainThread注解就能自動切換至主線程,可供參考田巴。

/**
 * 初始化監(jiān)聽
 */
@Override
protected void initListeners() {
    XPushManager.get().register(mMessageSubscriber);
}

private MessageSubscriber mMessageSubscriber = new MessageSubscriber() {
    @Override
    public void onMessageReceived(CustomMessage message) {
        showMessage(String.format("收到自定義消息:%s", message));
    }

    @Override
    public void onNotification(Notification notification) {
        showMessage(String.format("收到通知:%s", notification));
    }
};

@MainThread
private void showMessage(String msg) {
    tvContent.setText(msg);
}


@Override
public void onDestroyView() {
    XPushManager.get().unregister(mMessageSubscriber);
    super.onDestroyView();
}

5钠糊、推送消息的過濾處理

  • 通過調(diào)用XPushManager.get().addFilter()方法,可增加對訂閱推送消息的過濾處理壹哺。對于一些我們不想處理的消息抄伍,可以通過消息過濾器將它們篩選出來。

  • 通過調(diào)用XPushManager.get().removeFilter()方法管宵,即可去除消息過濾器截珍。

/**
 * 初始化監(jiān)聽
 */
@Override
protected void initListeners() {
    XPushManager.get().addFilter(mMessageFilter);
}

private IMessageFilter mMessageFilter = new IMessageFilter() {
    @Override
    public boolean filter(Notification notification) {
        if (notification.getContent().contains("XPush")) {
            showMessage("通知被攔截");
            return true;
        }
        return false;
    }

    @Override
    public boolean filter(CustomMessage message) {
        if (message.getMsg().contains("XPush")) {
            showMessage("自定義消息被攔截");
            return true;
        }
        return false;
    }
};

@Override
public void onDestroyView() {
    XPushManager.get().removeFilter(mMessageFilter);
    super.onDestroyView();
}

6攀甚、推送通知的點(diǎn)擊處理

對于通知的點(diǎn)擊事件,我們可以處理得更優(yōu)雅岗喉,自定義其點(diǎn)擊后的動作秋度,打開我們想讓用戶看到的頁面。

我們可以在全局消息推送的接收器IPushReceiver中的onNotificationClick回調(diào)中钱床,增加打開指定頁面的操作荚斯。

@Override
public void onNotificationClick(Context context, XPushMsg msg) {
    super.onNotificationClick(context, msg);
    //打開自定義的Activity
    Intent intent = IntentUtils.getIntent(context, TestActivity.class, null, true);
    intent.putExtra(KEY_PARAM_STRING, msg.getContent());
    intent.putExtra(KEY_PARAM_INT, msg.getId());
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    ActivityUtils.startActivity(intent);
}

需要注意的是,這需要你在消息推送平臺推送的通知使用的是自定義動作或者打開指定頁面類型查牌,并且傳入的Intent uri 內(nèi)容滿足如下格式:

  • title:通知的標(biāo)題

  • content:通知的內(nèi)容

  • extraMsg:通知附帶的拓展字段事期,可存放json或其他內(nèi)容

  • keyValue:通知附帶的鍵值對

xpush://com.xuexiang.xpush/notification?title=這是一個通知&content=這是通知的內(nèi)容&extraMsg=xxxxxxxxx&keyValue={"param1": "1111", "param2": "2222"}

當(dāng)然你也可以自定義傳入的Intent uri 格式,具體可參考項目中的XPushNotificationClickActivityAndroidManifest.xml


推送平臺說明

目前已支持的推送平臺

推送平臺 平臺名 平臺碼 模塊名 客戶端類
極光推送 JPush 1000 xpush-jpush com.xuexiang.xpush.jpush.JPushClient
友盟推送 UMengPush 1001 xpush-umeng com.xuexiang.xpush.umeng.UMengPushClient
華為推送 HuaweiPush 1002 xpush-huawei com.xuexiang.xpush.huawei.HuaweiPushClient
小米推送 MIPush 1003 xpush-xiaomi com.xuexiang.xpush.xiaomi.XiaoMiPushClient

推送平臺的注意事項

極光推送平臺所有特性都支持纸颜。

友盟推送

  • 友盟推送在進(jìn)行XPush初始化的時候兽泣,除了在主進(jìn)程中注冊,還需要在channel中注冊胁孙。

  • 友盟推送不支持Tag和alias的獲取

  • 友盟推送不支持監(jiān)聽推送的連接狀態(tài)唠倦。

華為推送

  • 華為推送在注冊之前需要安裝最新的推送服務(wù),否則將無法注冊成功(庫會自動彈出升級或者安裝提示)

  • 華為推送不支持所有Tag和alias的操作涮较。

  • 華為推送不支持接收通知到達(dá)事件牵敷。

小米推送

  • 小米推送一次只能操作一個Tag。

  • 小米推送注銷無結(jié)果反饋法希。

  • 小米推送不支持監(jiān)聽推送的連接狀態(tài)。

如何拓展第三方推送

由于Android推送平臺的眾多靶瘸,目前本項目不可能也沒必要提供所有推送平臺的集成庫苫亦。如果你想使用的推送平臺在我這沒有找到對應(yīng)的集成庫的話,那么就需要你自己寫一個了怨咪。

其實拓展一個第三方推送庫也不是很難屋剑,只要遵循以下4步驟就可以完成了:

  • 1.新建一個Android Library Module,然后將你準(zhǔn)備集成的推送平臺的依賴內(nèi)容導(dǎo)入進(jìn)來诗眨。這里包括引入推送依賴庫或SDK唉匾、配置AndroidManifest.xml

  • 2.創(chuàng)建該推送平臺的客戶端XXXClient匠楚,實現(xiàn)IPushClient接口巍膘,并且重寫對應(yīng)的方法。其中init芋簿、register峡懈、unRegistergetPlatformCode与斤、getPlatformName這5個方法是必須重寫的肪康。

IPushClient接口方法詳細(xì)如下:

public interface IPushClient {
    /**
     * 初始化【必須】
     *
     * @param context
     */
    void init(Context context);
    /**
     * 注冊推送【必須】
     */
    void register();
    /**
     * 注銷推送【必須】
     */
    void unRegister();
    /**
     * 綁定別名【別名是唯一的】
     *
     * @param alias 別名
     */
    void bindAlias(String alias);
    /**
     * 解綁別名
     *
     * @param alias 別名
     */
    void unBindAlias(String alias);
    /**
     * 獲取別名
     */
    void getAlias();
    /**
     * 增加標(biāo)簽
     *
     * @param tag 標(biāo)簽
     */
    void addTags(String... tag);
    /**
     * 刪除標(biāo)簽
     *
     * @param tag 標(biāo)簽
     */
    void deleteTags(String... tag);
    /**
     * 獲取標(biāo)簽
     */
    void getTags();
    /**
     * @return 獲取推送令牌
     */
    String getPushToken();
    /**
     * 注意千萬不要重復(fù)【必須】
     * @return 獲取平臺碼
     */
    int getPlatformCode();
    /**
     * 注意千萬不要重復(fù)【必須】
     * @return 獲取平臺名
     */
    String getPlatformName();
}

  • 3.創(chuàng)建和重寫三方消息推送的消息接收器(一般是重寫Receiver)荚恶。重寫三方推送的的接收透傳消息和通知的方法,調(diào)用XPush的transmitXXX方法磷支,將通知谒撼、透傳消息、通知點(diǎn)擊事件雾狈、以及其他事件廓潜,轉(zhuǎn)發(fā)到XPush。

主要調(diào)用以下五個方法:

(1)XPush.transmitMessage(): 轉(zhuǎn)發(fā)自定義(透傳)消息.

(2)XPush.transmitNotification(): 轉(zhuǎn)發(fā)通知到達(dá)消息.

(3)XPush.transmitNotificationClick(): 轉(zhuǎn)發(fā)通知點(diǎn)擊事件.

(4)XPush.transmitCommandResult(): 轉(zhuǎn)發(fā)IPushClient命令執(zhí)行結(jié)果.

(5)XPush.transmitConnectStatusChanged(): 轉(zhuǎn)發(fā)推送連接狀態(tài)發(fā)生改變的事件.

  • 4.增加該推送平臺對應(yīng)的代碼混淆配置信息箍邮。

以上即完成了推送平臺的集成茉帅。剩下的就是在初始化XPush的時候?qū)ν扑推脚_進(jìn)行選擇了.如果你看完了還是不會的話,你可以參考項目中的xpush-xiaomixpush-huawei.


實體介紹

XPushMsg

推送消息轉(zhuǎn)譯實體锭弊,攜帶消息的原始數(shù)據(jù)

字段名 類型 備注
mId int 消息ID / 狀態(tài)
mTitle String 通知標(biāo)題
mContent String 通知內(nèi)容
mMsg String 自定義(透傳)消息
mExtraMsg String 消息拓展字段
mKeyValue String 消息鍵值對

Notification

推送通知堪澎,由XPushMsg轉(zhuǎn)化而來

字段名 類型 備注
mId int 消息ID / 狀態(tài)
mTitle String 通知標(biāo)題
mContent String 通知內(nèi)容
mExtraMsg String 消息拓展字段
mKeyValue String 消息鍵值對

CustomMessage

自定義(透傳)消息,由XPushMsg轉(zhuǎn)化而來

字段名 類型 備注
mMsg String 自定義(透傳)消息
mExtraMsg String 消息拓展字段
mKeyValue String 消息鍵值對

XPushCommand

IPushClient執(zhí)行相關(guān)命令的結(jié)果信息實體

字段名 類型 備注
mType int 命令類型
mResultCode int 結(jié)果碼
mContent String 命令內(nèi)容
mExtraMsg String 拓展字段
mError String 錯誤信息

常量介紹

CommandType

命令的類型

命令名 命令碼 備注
TYPE_REGISTER 2000 注冊推送
TYPE_UNREGISTER 2001 注銷推送
TYPE_ADD_TAG 2002 添加標(biāo)簽
TYPE_DEL_TAG 2003 刪除標(biāo)簽
TYPE_GET_TAG 2004 獲取標(biāo)簽
TYPE_BIND_ALIAS 2005 綁定別名
TYPE_UNBIND_ALIAS 2006 解綁別名
TYPE_GET_ALIAS 2007 獲取別名
TYPE_AND_OR_DEL_TAG 2008 添加或刪除標(biāo)簽

ResultCode

命令的結(jié)果碼

結(jié)果名 結(jié)果碼 備注
RESULT_OK 0 成功
RESULT_ERROR 1 失敗

ConnectStatus

推送連接狀態(tài)

狀態(tài)名 狀態(tài)碼 備注
DISCONNECT 10 已斷開
CONNECTING 11 連接中
CONNECTED 12 已連接

混淆配置

# XPush的混淆
-keep class * extends com.xuexiang.xpush.core.IPushClient{*;}
-keep class * extends com.xuexiang.xpush.core.receiver.IPushReceiver{*;}

# 極光推送混淆
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-dontwarn cn.jiguang.**
-keep class cn.jiguang.** { *; }
-keep class * extends cn.jpush.android.service.JPushMessageReceiver{*;}

# umeng推送
-dontwarn com.umeng.**
-dontwarn com.taobao.**
-dontwarn anet.channel.**
-dontwarn anetwork.channel.**
-dontwarn org.android.**
-dontwarn org.apache.thrift.**
-dontwarn com.xiaomi.**
-dontwarn com.huawei.**
-dontwarn com.meizu.**
-keep class com.taobao.** {*;}
-keep class org.android.** {*;}
-keep class anet.channel.** {*;}
-keep class com.xiaomi.** {*;}
-keep class com.huawei.** {*;}
-keep class com.meizu.** {*;}
-keep class org.apache.thrift.** {*;}
-keep class com.alibaba.sdk.android.**{*;}
-keep class com.ut.**{*;}
-keep class com.ta.**{*;}

# 華為推送
-keep class com.huawei.hms.**{*;}
-keep class com.huawei.android.hms.agent.**{*;}

# 小米推送
-keep class * extends com.xiaomi.mipush.sdk.PushMessageReceiver{*;}

特別感謝

如果覺得項目還不錯味滞,可以考慮打賞一波

alipay.jpeg
weixinpay.jpeg

聯(lián)系方式

qq_group.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末樱蛤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剑鞍,更是在濱河造成了極大的恐慌昨凡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚁署,死亡現(xiàn)場離奇詭異便脊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)光戈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門哪痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人久妆,你說我怎么就攤上這事晌杰。” “怎么了筷弦?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵肋演,是天一觀的道長。 經(jīng)常有香客問我烂琴,道長爹殊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任奸绷,我火速辦了婚禮边灭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘健盒。我一直安慰自己绒瘦,他們只是感情好称簿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惰帽,像睡著了一般憨降。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上该酗,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天授药,我揣著相機(jī)與錄音,去河邊找鬼呜魄。 笑死悔叽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爵嗅。 我是一名探鬼主播娇澎,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睹晒!你這毒婦竟也來了趟庄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤伪很,失蹤者是張志新(化名)和其女友劉穎戚啥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锉试,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猫十,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了呆盖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拖云。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖絮短,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昨忆,我是刑警寧澤丁频,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站邑贴,受9級特大地震影響席里,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拢驾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一奖磁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧繁疤,春花似錦咖为、人聲如沸秕狰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸣哀。三九已至,卻和暖如春吞彤,著一層夾襖步出監(jiān)牢的瞬間我衬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工饰恕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挠羔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓埋嵌,卻偏偏與公主長得像破加,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子莉恼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348