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

logo

想看吐槽的點(diǎn)鏈接:
一步步走來(lái)的消息推送


一、為啥會(huì)有OnePush

消息推送,在國(guó)內(nèi),要么自己做,要么集成第三方的sdk,現(xiàn)在第三方推送的sdk,有很多可以選擇,友盟,極光,小米等,我們?cè)谶x擇消息推送的時(shí)候,肯定是需要一個(gè)能及時(shí)把消息推送給用戶的sdk,那么問(wèn)題來(lái)了,很多國(guó)產(chǎn)手機(jī)廠商都各自根據(jù)android修改的UI系統(tǒng),各種的進(jìn)程清理,導(dǎo)致消息推送的后臺(tái)無(wú)法存活,特別是小米、華為的手機(jī)上,只要用戶清理,基本上推送后臺(tái)服務(wù)就死絕了,當(dāng)然這個(gè)也不能怪人家手機(jī)廠商,主要是手機(jī)上的app,基本上每個(gè)app都有自己的后臺(tái)推送服務(wù),而且有的流氓程序,甚至還附加了很多其他的后臺(tái)服務(wù),這樣就會(huì)導(dǎo)致用戶手機(jī)耗電、卡頓,手機(jī)廠商為了解決既不耗電,也能及時(shí)收到消息通知,就推出了自己的推送SDK,比如小米,華為,魅族。如果你的app集成了該廠商的消息推送sdk,那么在該廠商手機(jī)上,就屬于系統(tǒng)的級(jí)別的服務(wù),就算手機(jī)被一鍵清理掉,消息還是能準(zhǔn)時(shí)的推送到用戶的手機(jī)上,但是在國(guó)內(nèi),生產(chǎn)手機(jī)的廠家不不止一個(gè),而且每家都有自己的消息推送,如何做到快速的接入和切換推送呢?那么OnePush,就是解決根據(jù)不同的廠商手機(jī),集成不同的推送,從而保證消息的及時(shí)送達(dá),目前OnePush提供的小米推送,華為推送的實(shí)現(xiàn),如果你還需要使用其他推送SDK,最多寫兩個(gè)類,就可以輕松接入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'
      compile 'com.peng.library:one-push-umeng:1.0.1'
}
  1. 繼承BaseOnePushReceiver重寫里面的方法,并在AndroidManifest.xml中注冊(cè)
<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標(biāo)簽下,添加第三方推送實(shí)現(xiàn)類
 <!--如果引入了one-push-huawei類庫(kù)-->
        <meta-data
            android:name="OnePush_HuaWei_102"
            android:value="com.peng.one.push.huawei.HuaweiPushClient" />

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

 <!--如果引入了one-push-umeng庫(kù)-->
        <meta-data
            android:name="OnePush_UMENG_103"
            android:value="com.peng.one.push.umeng.UMengPushClient" />

關(guān)于<meta-data/>標(biāo)簽書寫規(guī)則:

  • android:name 必須是以“ OnePush ”開頭,并且以"_"進(jìn)行分割(OnePush_平臺(tái)名稱_平臺(tái)標(biāo)識(shí)碼),在初始化OnePush 的時(shí)候,根據(jù)標(biāo)識(shí)碼和當(dāng)前手機(jī)系統(tǒng),動(dòng)態(tài)的使用不同平臺(tái)消息推送。
  • android:value 這個(gè)是繼承IPushClient實(shí)現(xiàn)類,全類名路徑。
  1. 添加第三方AppKey和AppSecret
    如果使用了one-push-xiaomi,那么需要在AndroidManifest.xml添加小米的AppKey和AppSecret(注意下面的“\ ”必須加上,否則獲取到的是float而不是String,就會(huì)導(dǎo)致id和key獲取不到正確的數(shù)據(jù))
  <meta-data
            android:name="MI_PUSH_APP_ID"
            android:value="\ 2215463567096567312" />

        <meta-data
            android:name="MI_PUSH_APP_KEY"
            android:value="\ 9889423330043400" />

 <!--umeng_push需要進(jìn)行下面配置-->
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="593e2640b27b0a0852000014"/>

        <meta-data
            android:name="UMENG_MESSAGE_SECRET"
            android:value="b765e337eedd391603550eb6f922f81b"/>
  1. 如果OnePush使用了小米推送,需要注冊(cè)小米推送權(quán)限
 <!--注意下面的必須修改   -->
    <permission
        android:name="com.peng.one.push.permission.MIPUSH_RECEIVE"
        android:protectionLevel="signature" />
    <!--這里com.peng.one.push改成你的app的包名,以build.gralde中的applicationId為準(zhǔn)-->
    <uses-permission android:name="com.peng.one.push.permission.MIPUSH_RECEIVE" />
   <!--這里com.peng.one.push改成你的app的包名,以build.gralde中的applicationId為準(zhǔn)-->

  1. 初始化OnePush
//初始化的時(shí)候,回調(diào)該方法,可以根據(jù)platformCode和當(dāng)前系統(tǒng)的類型,進(jìn)行注冊(cè)
//返回true,則使用該平臺(tái)的推送,否者就不使用
OnePush.init(this, new OnOnePushRegisterListener() {
                @Override
                public boolean onRegisterPush(int platformCode, String platformName) {
                    //platformCode和platformName就是在<meta/>標(biāo)簽中,對(duì)應(yīng)的"平臺(tái)標(biāo)識(shí)碼"和平臺(tái)名稱
                    //華為手機(jī)使用華為推送,其他手機(jī)使用小米推送
                    if (RomUtils.isHuaweiRom() && platformCode == 102) {
                        Log.i(TAG, "onRegisterPush: 華為推送");
                        return true;
                    } else if (platformCode == 101) {
                        Log.i(TAG, "onRegisterPush: 小米推送");
                        return true;
                    }
                    return false;
                }
            });
  1. 關(guān)于添加其他消息推送SDK具體操作(如果你不滿足OnePush提供的小米、華為推送,可根據(jù)下面步驟,將其他廠商提供的推送,添加到OnePush里面)
  • 創(chuàng)建XXXClient 實(shí)現(xiàn)IPushClient接口,并且重寫對(duì)應(yīng)的方法,initContext(Context),會(huì)在初始化的使用進(jìn)行調(diào)用,可以在這里進(jìn)行獲取第三方推送注冊(cè)需要的ID,KEY或者其他操作,第三方推送ID、KEY,建議在AndroidManifest.xml中的Application標(biāo)簽下添加<meta/>,然后在initContext(Context)中進(jìn)行獲取。

  • 創(chuàng)建和重寫三方消息推送的Receiver或者IntentService(一般第三方會(huì)讓你繼承他的receiver,這里指的就是他),重寫三方推送的的接收透?jìng)飨⒑屯ㄖ姆椒?,調(diào)用OneRepeater的transmitXXX方法,將通知、透?jìng)飨?、通知點(diǎn)擊事件、以及其他事件,轉(zhuǎn)發(fā)到OnePush。

  • 記得在OnePush注冊(cè)的時(shí)候,進(jìn)行消息推送平臺(tái)的選擇。

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

三、相關(guān)api介紹

<h6 align = "left">OnePush詳細(xì)api</h6>

方法名稱 描述及解釋
init(Context , OnOnePushRegisterListener) 初始化OnePush,建議在Application中onCreate()方法
register() 注冊(cè)消息推送
unregister() 取消注冊(cè)消息推送
bindAlias(String) 綁定別名
unBindAlias(String) 取消綁定別名
addTag(String) 添加標(biāo)簽
deleteTag(String) 刪除標(biāo)簽
getPushPlatFormCode() 獲取推送平臺(tái)code(AndroidManifest.xml中<meta/>注冊(cè))
getPushPlatFormName() 獲取推送平臺(tái)name(AndroidManifest.xml中<meta/>注冊(cè))
setDebug(boolean) 設(shè)置是否為debug模式

</br>
<h6 align = "left">OneRepeater詳細(xì)api</h6>

方法名稱 描述及解釋
transmitCommandResult(Context,int,int,String,String,String) 轉(zhuǎn)發(fā)操作反饋(具體type在OnePush.TYPE_XXX)
transmitMessage(Context,String,String,Map<String,String>) 轉(zhuǎn)發(fā)透?jìng)飨?/td>
transmitNotification(Context,int,String,String,Sting,Map<String,String>) 轉(zhuǎn)發(fā)通知
transmitNotificationClick(Context,int,String,String,Sting,Map<String,String>) 轉(zhuǎn)發(fā)通知點(diǎn)擊事件

四、OnePush消息推送測(cè)試

OnePush提供一個(gè)Java服務(wù)端消息推送的示例,大家可以使用它進(jìn)行消息推送的測(cè)試。

五、使用注意

  • BaseOnePushReceiver中的onReceiveNotification()方法,在使用的華為推送的時(shí)候,該方法不會(huì)被調(diào)用,因?yàn)槿A為推送沒(méi)有提供這樣的支持。
  • BaseOnePushReceiver中的onReceiveNotificationClick()方法,在使用華為推送的時(shí)候,雖然華為支持,但是如果app被華為一鍵清理掉后,收到通知,那么點(diǎn)擊通知是不會(huì)調(diào)用華為推送的onEvent()方法,那么如果我們這里轉(zhuǎn)發(fā),onReceiveNotificationClick()是不會(huì)收到的。
  • 為了解決華為推送,在手機(jī)上被清理掉后,onReceiveNotificationClick()不被調(diào)用的情況,OnePush在華為推送上,使用跳轉(zhuǎn)到指定Activity的推送通知,那么服務(wù)端必須提供一個(gè)Intent序列化的uri,OnePush提供的Java服務(wù)端消息推送示例中,已經(jīng)提供了服務(wù)端序列化Intent的uri的實(shí)現(xiàn)(詳見:com.peng.one.push.service.huawei.intent.HWPushIntent)。
  • 使用OnePushService測(cè)試app的時(shí)候,需要修改Constant類的第三方推送id,否則將無(wú)法推送!當(dāng)然你也可以使用第三方推送的web后臺(tái)。

六、華為推送服務(wù)端Intent序列化示例

intent://com.peng.one.push/notification?title=標(biāo)題&content=通知內(nèi)容&extraMsg=額外信息&keyValue={"key1":"value1","key2":"value2","key3":"value3"}#Intent;scheme=OnePush;launchFlags=0x10000000;end

七、開源地址

OnePush源代碼
使用介紹

八、附點(diǎn)圖吧,前面太多文字看著太累

小米推送 華為推送 友盟推送
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容