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

logo
想看吐槽的點鏈接:

一步步走來的消息推送

詳細集成指南,請點這里!

android消息推送的好消息:

安卓統一推送標準 已取得階段性成果

實驗室開展基于安卓操作系統統一推送工作的相關Q&A


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

前言

看了 " 泰爾終端實驗室 "說要統一android的消息推送了,差點激動的掉眼淚!
仔細看了下當前的統一推送的進度,說實話,個人感覺真的需要一段時間啊,而且就算將來完成整個統一的推送標準,那么還是會有部分手機得不到升級,還得繼續時候第三方推送。不過能至少到時候集成的推送少點了。
根據泰爾實驗室的文章,有那么一段,說要限制透傳消息,個人覺得透傳消息還是很有用的,如果要限制估計還是有點坑,不知道你是怎么看的?

問題五:統一推送是否能減少手機耗電?

目前,推送消息過程中電量浪費一方面來自其自建長連接通道消耗的功耗,另一方面來自應用為接收消息“自啟動”、“相互拉起”等“保活”行為造成的資源消耗。在建立統一推送的機制后,推送鏈路將會合并成為一條,同時,應用不需要為了接收推送消息而“保活”,從而節約手機能耗和系統資源。
此外,由于應用的“日活”數據對開發者和投資人非常重要,一些開發者會利用透傳消息,在用戶不知情的情況下激活應用,造成耗電和資源浪費,因此,透傳消息激活應用的做法也會被限制。

快速集成指南

1. 添加OnePush主要依賴(必須添加)
dependencies {
      compile 'com.peng.library:one-push-core:1.0.1'
}
2. 添加第三方推送依賴(根據自己的需求進行添加,當然也可以全部添加)
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標簽下,添加第三方推送實現類
 <!--如果引入了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" />

關于<meta-data/>標簽書寫規則:

  • android:name 必須是以“ OnePush ”開頭,并且以"_"進行分割(OnePush_平臺名稱_平臺標識碼),在初始化OnePush 的時候,根據標識碼和當前手機系統,動態的使用不同平臺消息推送。
  • android:value 這個是繼承IPushClient實現類,全類名路徑。
5. 添加第三方AppKey和AppSecret

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

 <!--xiaomi_push需要進行下面的配置-->
        <meta-data
            android:name="MI_PUSH_APP_ID"
            android:value="\ 2215463567096567312" />

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

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

        <meta-data
            android:name="UMENG_MESSAGE_SECRET"
            android:value="b765e337eedd391603550eb6f922f81b"/>

 <!--huawei_push,在app上不需要配置appkey和secret,需要在華為開發者平臺,申請華為推送,并配置包名和證書指紋-->
6. 如果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為準-->
7. 初始化OnePush
//初始化的時候,回調該方法,可以根據platformCode和當前系統的類型,進行注冊
//返回true,則使用該平臺的推送,否者就不使用
 OnePush.init(this, ((platformCode, platformName) -> {
                //platformCode和platformName就是在<meta/>標簽中,對應的"平臺標識碼"和平臺名稱
                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. 后臺推送動作說明:
  • 注冊友盟推送除了在主進程中,還需要在channel進程中進行注冊,具體操作見DEMO(UMeng官方推送就是這樣要求的)
  • 友盟推送:后臺配置后續動作,為"自定義行為"。
  • 小米推送:后臺配置點擊后續動作,為"由應用客戶端自定義"。
  • 華為推送:后臺配置后續行為,為"自定義動作",具體內容,可由OnePushService包:com.peng.one.push.service.huawei.intent.HWPushIntent生成,如果后臺不是java開發的,參照HWPushIntent重新寫。
9. 集成 友盟推送 的童鞋注意啦
  • OnePush拓展的友盟推送是版本v3.1.1a,是帶有透傳消息的。
  • 關于utdid重復引入的問題,可以通過下面的方案解決
//如果utdid和你工程項目里面發生沖突了,請修改成這個依賴
 compile ('com.peng.library:one-push-umeng:1.0.2' ){
        exclude group: 'com.peng.library',module:'one-push-umeng-utdid4all'
    }
  • 關于友盟推送so文件處理,OnePush拓展的友盟推送,默認將所有的so文件引入了,這樣就導致友盟推送aar文件大小達到2.25M左右,所以下面提供一個裁剪so文件的方法
    第一步:在工程根目錄的gradle.properties文件中,添加 android.useDeprecatedNdk=true
    第二步:在項目(app)的build.gradle節點defaultConfig下添加
 ndk {
            // 設置支持的SO庫
            abiFilters 'armeabi'//,'armeabi-v7a', 'x86', 'x86_64', 'arm64-v8a','mips','mips64'
        }

根據自己工程的需要,配置不同的so編譯,然后Rebuild Project。

  • 最后啰嗦幾句,其實只要添加armeabi,就可以了,armeabi在每個平臺都是可以用的,俗稱萬能油。只是在其他CPU平臺上,使用armeabi,效率不是很高而已,其實微信也是只使用了armeabi,只不過它為了提高效率,他將v7a也放在了armeabi里面,最后根據具體安裝的手機CPU,動態加載而已。
10. 集成 華為推送 的童鞋注意啦
  • BaseOnePushReceiver中的onReceiveNotification()方法,在使用的華為推送的時候,該方法不會被調用,因為華為推送沒有提供這樣的支持。
  • BaseOnePushReceiver中的onReceiveNotificationClick()方法,在使用華為推送的時候,雖然華為支持,但是如果app被華為一鍵清理掉后,收到通知,那么點擊通知是不會調用華為推送的onEvent()方法,那么如果我們這里轉發,onReceiveNotificationClick()是不會收到的。
  • 為了解決華為推送,在手機上被清理掉后,onReceiveNotificationClick()不被調用的情況,OnePush在華為推送上,使用跳轉到指定Activity的推送通知,那么服務端必須提供一個Intent序列化的uri,OnePush提供的Java服務端消息推送示例中,已經提供了服務端序列化Intent的uri的實現(詳見:com.peng.one.push.service.huawei.intent.HWPushIntent)。
11. 關于將來拓展其他平臺消息推送說明
  • 個人感覺,除了廠商的推送,其他的第三方推送只需要集成一個就可以了,假如你想使用OnePush,但是目前OnePush拓展的消息推送平臺,沒有你目前使用的怎么辦呢,可以參照OnePush拓展詳細說明,進行集成。
  • 如果你已經拓展其他平臺的消息推送,并且測試通過,可以將代碼Push過來,我檢查過后,合并進來,這樣可以方便大家。
12. 拓展其他平臺說明

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

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

  • 創建和重寫三方消息推送的Receiver或者IntentService(一般第三方會讓你繼承他的receiver,這里指的就是他),重寫三方推送的的接收透傳消息和通知的方法,調用OneRepeater的transmitXXX方法,將通知、透傳消息、通知點擊事件、以及其他事件,轉發到OnePush。

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

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

三、相關api介紹

<h6 align = "left">OnePush詳細api</h6>

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

</br>
<h6 align = "left">OneRepeater詳細api</h6>

方法名稱 描述及解釋
transmitCommandResult(Context,int,int,String,String,String) 轉發操作反饋(具體type在OnePush.TYPE_XXX)
transmitMessage(Context,String,String,Map<String,String>) 轉發透傳消息
transmitNotification(Context,int,String,String,Sting,Map<String,String>) 轉發通知
transmitNotificationClick(Context,int,String,String,Sting,Map<String,String>) 轉發通知點擊事件
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容