OnePush更新---拓展友盟推送

logo
想看吐槽的點(diǎn)鏈接:

一步步走來的消息推送

詳細(xì)集成指南晰洒,請點(diǎn)這里轧抗!

android消息推送的好消息:

安卓統(tǒng)一推送標(biāo)準(zhǔn) 已取得階段性成果

實(shí)驗(yàn)室開展基于安卓操作系統(tǒng)統(tǒng)一推送工作的相關(guān)Q&A


小米推送 華為推送 友盟推送

前言

看了 " 泰爾終端實(shí)驗(yàn)室 "說要統(tǒng)一android的消息推送了松蒜,差點(diǎn)激動的掉眼淚芜繁!
仔細(xì)看了下當(dāng)前的統(tǒng)一推送的進(jìn)度积糯,說實(shí)話躏结,個人感覺真的需要一段時間啊湃累,而且就算將來完成整個統(tǒng)一的推送標(biāo)準(zhǔn)栅干,那么還是會有部分手機(jī)得不到升級嘉栓,還得繼續(xù)時候第三方推送宏榕。不過能至少到時候集成的推送少點(diǎn)了拓诸。
根據(jù)泰爾實(shí)驗(yàn)室的文章,有那么一段麻昼,說要限制透傳消息奠支,個人覺得透傳消息還是很有用的,如果要限制估計還是有點(diǎn)坑抚芦,不知道你是怎么看的倍谜?

問題五:統(tǒng)一推送是否能減少手機(jī)耗電?

目前叉抡,推送消息過程中電量浪費(fèi)一方面來自其自建長連接通道消耗的功耗尔崔,另一方面來自應(yīng)用為接收消息“自啟動”、“相互拉起”等“比烀瘢活”行為造成的資源消耗季春。在建立統(tǒng)一推送的機(jī)制后,推送鏈路將會合并成為一條消返,同時载弄,應(yīng)用不需要為了接收推送消息而“保活”撵颊,從而節(jié)約手機(jī)能耗和系統(tǒng)資源宇攻。
此外,由于應(yīng)用的“日活”數(shù)據(jù)對開發(fā)者和投資人非常重要倡勇,一些開發(fā)者會利用透傳消息逞刷,在用戶不知情的情況下激活應(yīng)用,造成耗電和資源浪費(fèi)妻熊,因此夸浅,透傳消息激活應(yīng)用的做法也會被限制。

快速集成指南

1. 添加OnePush主要依賴(必須添加)
dependencies {
      compile 'com.peng.library:one-push-core:1.0.1'
}
2. 添加第三方推送依賴(根據(jù)自己的需求進(jìn)行添加固耘,當(dāng)然也可以全部添加)
dependencies {
      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.2'
}
3. 繼承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>
4. 在AndroidManifest.xml的application標(biāo)簽下,添加第三方推送實(shí)現(xiàn)類
 <!--如果引入了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" />

 <!--如果引入了one-push-umeng庫-->
        <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_平臺名稱_平臺標(biāo)識碼)番枚,在初始化OnePush 的時候,根據(jù)標(biāo)識碼和當(dāng)前手機(jī)系統(tǒng)损敷,動態(tài)的使用不同平臺消息推送葫笼。
  • android:value 這個是繼承IPushClient實(shí)現(xiàn)類,全類名路徑拗馒。
5. 添加第三方AppKey和AppSecret

如果使用了one-push-xiaomi,那么需要在AndroidManifest.xml添加小米的AppKey和AppSecret(注意下面的“\ ”必須加上路星,否則獲取到的是float而不是String,就會導(dǎo)致id和key獲取不到正確的數(shù)據(jù))

 <!--xiaomi_push需要進(jìn)行下面的配置-->
        <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"/>

 <!--huawei_push诱桂,在app上不需要配置appkey和secret洋丐,需要在華為開發(fā)者平臺呈昔,申請華為推送,并配置包名和證書指紋-->
6. 如果OnePush使用了小米推送友绝,需要注冊小米推送權(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)-->
7. 初始化OnePush
//初始化的時候迁客,回調(diào)該方法郭宝,可以根據(jù)platformCode和當(dāng)前系統(tǒng)的類型,進(jìn)行注冊
//返回true掷漱,則使用該平臺的推送粘室,否者就不使用
 OnePush.init(this, ((platformCode, platformName) -> {
                //platformCode和platformName就是在<meta/>標(biāo)簽中,對應(yīng)的"平臺標(biāo)識碼"和平臺名稱
                if (platformCode == 102 && RomUtils.isHuaweiRom()) {//華為
                    return true;
                } else if (platformCode == 101 && RomUtils.isMiuiRom()) {//小米
                    return true;
                } else if (platformCode == 103) {//友盟
                    return true;
                }
                return false;
            }));
            OnePush.register();
8. 后臺推送動作說明:
  • 注冊友盟推送除了在主進(jìn)程中卜范,還需要在channel進(jìn)程中進(jìn)行注冊衔统,具體操作見DEMO(UMeng官方推送就是這樣要求的)
  • 友盟推送:后臺配置后續(xù)動作,為"自定義行為"先朦。
  • 小米推送:后臺配置點(diǎn)擊后續(xù)動作缰冤,為"由應(yīng)用客戶端自定義"犬缨。
  • 華為推送:后臺配置后續(xù)行為喳魏,為"自定義動作",具體內(nèi)容怀薛,可由OnePushService包:com.peng.one.push.service.huawei.intent.HWPushIntent生成刺彩,如果后臺不是java開發(fā)的,參照HWPushIntent重新寫枝恋。
9. 集成 友盟推送 的童鞋注意啦
  • OnePush拓展的友盟推送是版本v3.1.1a创倔,是帶有透傳消息的。
  • 關(guān)于utdid重復(fù)引入的問題焚碌,可以通過下面的方案解決
//如果utdid和你工程項(xiàng)目里面發(fā)生沖突了畦攘,請修改成這個依賴
 compile ('com.peng.library:one-push-umeng:1.0.2' ){
        exclude group: 'com.peng.library',module:'one-push-umeng-utdid4all'
    }
  • 關(guān)于友盟推送so文件處理,OnePush拓展的友盟推送十电,默認(rèn)將所有的so文件引入了知押,這樣就導(dǎo)致友盟推送aar文件大小達(dá)到2.25M左右,所以下面提供一個裁剪so文件的方法
    第一步:在工程根目錄的gradle.properties文件中鹃骂,添加 android.useDeprecatedNdk=true
    第二步:在項(xiàng)目(app)的build.gradle節(jié)點(diǎn)defaultConfig下添加
 ndk {
            // 設(shè)置支持的SO庫
            abiFilters 'armeabi'//,'armeabi-v7a', 'x86', 'x86_64', 'arm64-v8a','mips','mips64'
        }

根據(jù)自己工程的需要台盯,配置不同的so編譯,然后Rebuild Project畏线。

  • 最后啰嗦幾句静盅,其實(shí)只要添加armeabi,就可以了寝殴,armeabi在每個平臺都是可以用的蒿叠,俗稱萬能油明垢。只是在其他CPU平臺上,使用armeabi市咽,效率不是很高而已袖外,其實(shí)微信也是只使用了armeabi,只不過它為了提高效率魂务,他將v7a也放在了armeabi里面曼验,最后根據(jù)具體安裝的手機(jī)CPU,動態(tài)加載而已粘姜。
10. 集成 華為推送 的童鞋注意啦
  • BaseOnePushReceiver中的onReceiveNotification()方法鬓照,在使用的華為推送的時候,該方法不會被調(diào)用孤紧,因?yàn)槿A為推送沒有提供這樣的支持豺裆。
  • BaseOnePushReceiver中的onReceiveNotificationClick()方法,在使用華為推送的時候号显,雖然華為支持臭猜,但是如果app被華為一鍵清理掉后,收到通知押蚤,那么點(diǎn)擊通知是不會調(diào)用華為推送的onEvent()方法蔑歌,那么如果我們這里轉(zhuǎn)發(fā),onReceiveNotificationClick()是不會收到的揽碘。
  • 為了解決華為推送次屠,在手機(jī)上被清理掉后,onReceiveNotificationClick()不被調(diào)用的情況雳刺,OnePush在華為推送上劫灶,使用跳轉(zhuǎn)到指定Activity的推送通知,那么服務(wù)端必須提供一個Intent序列化的uri掖桦,OnePush提供的Java服務(wù)端消息推送示例中本昏,已經(jīng)提供了服務(wù)端序列化Intent的uri的實(shí)現(xiàn)(詳見:com.peng.one.push.service.huawei.intent.HWPushIntent)。
11. 關(guān)于將來拓展其他平臺消息推送說明
  • 個人感覺枪汪,除了廠商的推送涌穆,其他的第三方推送只需要集成一個就可以了,假如你想使用OnePush料饥,但是目前OnePush拓展的消息推送平臺蒲犬,沒有你目前使用的怎么辦呢,可以參照OnePush拓展詳細(xì)說明岸啡,進(jìn)行集成原叮。
  • 如果你已經(jīng)拓展其他平臺的消息推送,并且測試通過,可以將代碼Push過來奋隶,我檢查過后擂送,合并進(jìn)來,這樣可以方便大家唯欣。
12. 拓展其他平臺說明

關(guān)于添加其他消息推送SDK具體操作(如果你不滿足OnePush提供的小米嘹吨、華為推送,可根據(jù)下面步驟境氢,將其他廠商提供的推送蟀拷,添加到OnePush里面)

  • 創(chuàng)建XXXClient 實(shí)現(xiàn)IPushClient接口,并且重寫對應(yīng)的方法萍聊,initContext(Context),會在初始化的使用進(jìn)行調(diào)用问芬,可以在這里進(jìn)行獲取第三方推送注冊需要的ID,KEY或者其他操作寿桨,第三方推送ID此衅、KEY,建議在AndroidManifest.xml中的Application標(biāo)簽下添加<meta/>亭螟,然后在initContext(Context)中進(jìn)行獲取挡鞍。

  • 創(chuàng)建和重寫三方消息推送的Receiver或者IntentService(一般第三方會讓你繼承他的receiver,這里指的就是他)预烙,重寫三方推送的的接收透傳消息和通知的方法墨微,調(diào)用OneRepeater的transmitXXX方法,將通知默伍、透傳消息欢嘿、通知點(diǎn)擊事件衰琐、以及其他事件也糊,轉(zhuǎn)發(fā)到OnePush。

  • 記得在OnePush注冊的時候羡宙,進(jìn)行消息推送平臺的選擇狸剃。

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

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

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

方法名稱 描述及解釋
init(Context , OnOnePushRegisterListener) 初始化OnePush狗热,建議在Application中onCreate()方法
register() 注冊消息推送
unregister() 取消注冊消息推送
bindAlias(String) 綁定別名
unBindAlias(String) 取消綁定別名
addTag(String) 添加標(biāo)簽
deleteTag(String) 刪除標(biāo)簽
getPushPlatFormCode() 獲取推送平臺code(AndroidManifest.xml中<meta/>注冊)
getPushPlatFormName() 獲取推送平臺name(AndroidManifest.xml中<meta/>注冊)
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ā)透傳消息
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)擊事件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钞馁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匿刮,更是在濱河造成了極大的恐慌僧凰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熟丸,死亡現(xiàn)場離奇詭異训措,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門绩鸣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀大,“玉大人,你說我怎么就攤上這事呀闻』瑁” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵捡多,是天一觀的道長蓖康。 經(jīng)常有香客問我,道長垒手,這世上最難降的妖魔是什么钓瞭? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮淫奔,結(jié)果婚禮上山涡,老公的妹妹穿的比我還像新娘。我一直安慰自己唆迁,他們只是感情好鸭丛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唐责,像睡著了一般鳞溉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鼠哥,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天熟菲,我揣著相機(jī)與錄音,去河邊找鬼朴恳。 笑死抄罕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的于颖。 我是一名探鬼主播呆贿,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼森渐!你這毒婦竟也來了做入?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤同衣,失蹤者是張志新(化名)和其女友劉穎竟块,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耐齐,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪秘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年前弯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秫逝。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡恕出,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出违帆,到底是詐尸還是另有隱情浙巫,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布刷后,位于F島的核電站的畴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尝胆。R本人自食惡果不足惜丧裁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望含衔。 院中可真熱鬧煎娇,春花似錦、人聲如沸贪染。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杭隙。三九已至哟绊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痰憎,已是汗流浹背票髓。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铣耘,地道東北人洽沟。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像涡拘,于是被迫代替她去往敵國和親玲躯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容