OnePush一個可拓展的Android消息推送SDK(使用介紹)

一、爲啥會有OnePush

消息推送,在國內,要麼自己做,要麼集成第三方的sdk,現在第三方推送的sdk,有很多可以選擇,友盟,極光,小米等,我們在選擇消息推送的時候,肯定是需要一個能及時把消息推送給用戶的sdk,那麼問題來了,很多國產手機廠商都各自根據android修改的UI系統,各種的進程清理,導致消息推送的後臺無法存活,特別是小米、華爲的手機上,只要用戶清理,基本上推送後臺服務就死絕了,當然這個也不能怪人家手機廠商,主要是手機上的app,基本上每個app都有自己的後臺推送服務,而且有的流氓程序,甚至還附加了很多其他的後臺服務,這樣就會導致用戶手機耗電、卡頓,手機廠商爲了解決既不耗電,也能及時收到消息通知,就推出了自己的推送SDK,比如小米,華爲,魅族。如果你的app集成了該廠商的消息推送sdk,那麼在該廠商手機上,就屬於系統的級別的服務,就算手機被一鍵清理掉,消息還是能準時的推送到用戶的手機上,但是在國內,生產手機的廠家不不止一個,而且每家都有自己的消息推送,如何做到快速的接入和切換推送呢?那麼OnePush,就是解決根據不同的廠商手機,集成不同的推送,從而保證消息的及時送達,目前OnePush提供的小米推送,華爲推送的實現,如果你還需要使用其他推送SDK,最多寫兩個類,就可以輕鬆接入OnePush。

二、怎麼集成和使用OnePush

  1. 添加依賴
dependencies {
      compile 'com.peng.library:one-push-core:1.0.1'
      compile 'com.peng.library:one-push-huawei:1.0.1'
      compile 'com.peng.library:one-push-xiaomi:1.0.1'
}
  1. 繼承BaseOnePushReceiver重寫裏面的方法,並在AndroidManifest.xml中註冊
<receiver android:name="com.peng.openpush.TestPushReceiver">
            <intent-filter>
                 <action android:name="com.peng.one.push.ACTION_RECEIVE_NOTIFICATION" />
                <action android:name="com.peng.one.push.ACTION_RECEIVE_NOTIFICATION_CLICK" />
                <action android:name="com.peng.one.push.ACTION_RECEIVE_MESSAGE" />
                <action android:name="com.peng.one.push.ACTION_RECEIVE_COMMAND_RESULT" />
            </intent-filter>
</receiver>
  1. 在AndroidManifest.xml的application標籤下,添加第三方推送實現類
 <!--如果引入了one-push-huawei類庫-->
        <meta-data
            android:name="OnePush_HuaWei_102"
            android:value="com.peng.one.push.huawei.HuaweiPushClient" />

 <!--如果引入了one-push-xiaomi庫-->
        <meta-data
            android:name="OnePush_XiaoMi_101"
            android:value="com.peng.one.push.xiaomi.XiaomiPushClient" />

關於標籤書寫規則:
* android:name 必須是以“ OnePush ”開頭,並且以”_”進行分割(OnePush_平臺名稱_平臺標識碼),在初始化OnePush 的時候,根據標識碼和當前手機系統,動態的使用不同平臺消息推送。
* android:value 這個是繼承IPushClient實現類,全類名路徑。

  1. 添加第三方AppKey和AppSecret
    如果使用了one-push-xiaomi,那麼需要在AndroidManifest.xml添加小米的AppKey和AppSecret(注意下面的“\ ”必須加上,否則獲取到的是float而不是String,就會導致id和key獲取不到正確的數據)
  <meta-data
            android:name="MI_PUSH_APP_ID"
            android:value="\ 2215463567096567312" />

        <meta-data
            android:name="MI_PUSH_APP_KEY"
            android:value="\ 9889423330043400" />
  1. 如果OnePush使用了小米推送,需要註冊小米推送權限
 <!--注意下面的必須修改   -->
    <permission
        android:name="com.peng.one.push.permission.MIPUSH_RECEIVE"
        android:protectionLevel="signature" />
    <!--這裏com.peng.one.push改成你的app的包名,以build.gralde中的applicationId爲準-->
    <uses-permission android:name="com.peng.one.push.permission.MIPUSH_RECEIVE" />
   <!--這裏com.peng.one.push改成你的app的包名,以build.gralde中的applicationId爲準-->
  1. 初始化OnePush
//初始化的時候,回調該方法,可以根據platformCode和當前系統的類型,進行註冊
//返回true,則使用該平臺的推送,否者就不使用
OnePush.init(this, new OnOnePushRegisterListener() {
                @Override
                public boolean onRegisterPush(int platformCode, String platformName) {
                    //platformCode和platformName就是在<meta/>標籤中,對應的"平臺標識碼"和平臺名稱
                    //華爲手機使用華爲推送,其他手機使用小米推送
                    if (RomUtils.isHuaweiRom() && platformCode == 102) {
                        Log.i(TAG, "onRegisterPush: 華爲推送");
                        return true;
                    } else if (platformCode == 101) {
                        Log.i(TAG, "onRegisterPush: 小米推送");
                        return true;
                    }
                    return false;
                }
            });
  1. 關於添加其他消息推送SDK具體操作(如果你不滿足OnePush提供的小米、華爲推送,可根據下面步驟,將其他廠商提供的推送,添加到OnePush裏面)

    • 創建XXXClient 實現IPushClient接口,並且重寫對應的方法,initContext(Context),會在初始化的使用進行調用,可以在在這裏進行獲取第三方推送註冊需要的ID,KEY或者其他操作,建議在AndroidManifest.xml中的Application標籤下添加,然後在initContext(Context)中進行獲取。

    • 創建三方消息推送的Receiver後者IntentService,重寫三方推送的的接收透傳消息和通知的方法,並且使用OneOneRepeater將具體的操作反饋,透傳消息,通知,通知點擊事件,轉發到OnePush。

    • 記得在OnePush註冊的時候,進行消息推送平臺的選擇。

    • 具體操作方法:詳見one-push-xiaomi

三、相關api介紹

OnePush詳細api
方法名稱 描述及解釋
init(Context , OnOnePushRegisterListener) 初始化OnePush,建議在Application中onCreate()方法
register() 註冊消息推送
unregister() 取消註冊消息推送
bindAlias(String) 綁定別名
unBindAlias(String) 取消綁定別名
addTag(String) 添加標籤
deleteTag(String) 刪除標籤
getPushPlatFormCode() 獲取推送平臺code(AndroidManifest.xml中註冊)
getPushPlatFormName() 獲取推送平臺name(AndroidManifest.xml中註冊)
setDebug(boolean) 設置是否爲debug模式

OneRepeater詳細api
方法名稱 描述及解釋
transmitCommandResult(Context,int,int,String,String,String) 轉發操作反饋(具體type在OnePush.TYPE_XXX)
transmitMessage(Context,String,String,Map
intent://com.peng.one.push/notification?title=標題&content=通知內容&extraMsg=額外信息&keyValue={"key1":"value1","key2":"value2","key3":"value3"}#Intent;scheme=OnePush;launchFlags=0x10000000;end

七、開源地址

OnePush源代碼
使用介紹

八、附點圖吧,前面太多文字看着太累

小米推送.png

華爲推送.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章