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

logo

想看吐槽的點鏈接:
一步步走來的消息推送


一、為啥會有OnePush

消息推送骏掀,在國內鸠澈,要么自己做,要么集成第三方的sdk截驮,現在第三方推送的sdk笑陈,有很多可以選擇,友盟葵袭,極光涵妥,小米等,我們在選擇消息推送的時候坡锡,肯定是需要一個能及時把消息推送給用戶的sdk蓬网,那么問題來了,很多國產手機廠商都各自根據android修改的UI系統(tǒng)鹉勒,各種的進程清理帆锋,導致消息推送的后臺無法存活,特別是小米禽额、華為的手機上锯厢,只要用戶清理,基本上推送后臺服務就死絕了脯倒,當然這個也不能怪人家手機廠商实辑,主要是手機上的app,基本上每個app都有自己的后臺推送服務藻丢,而且有的流氓程序剪撬,甚至還附加了很多其他的后臺服務,這樣就會導致用戶手機耗電悠反、卡頓残黑,手機廠商為了解決既不耗電,也能及時收到消息通知问慎,就推出了自己的推送SDK萍摊,比如小米,華為如叼,魅族冰木。如果你的app集成了該廠商的消息推送sdk,那么在該廠商手機上,就屬于系統(tǒng)的級別的服務踊沸,就算手機被一鍵清理掉歇终,消息還是能準時的推送到用戶的手機上,但是在國內逼龟,生產手機的廠家不不止一個评凝,而且每家都有自己的消息推送,如何做到快速的接入和切換推送呢腺律?那么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'
      compile 'com.peng.library:one-push-umeng: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" />

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

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

  • android:name 必須是以“ OnePush ”開頭涨冀,并且以"_"進行分割(OnePush_平臺名稱_平臺標識碼),在初始化OnePush 的時候檀何,根據標識碼和當前手機系統(tǒng)蝇裤,動態(tài)的使用不同平臺消息推送。
  • 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" />

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

        <meta-data
            android:name="UMENG_MESSAGE_SECRET"
            android:value="b765e337eedd391603550eb6f922f81b"/>
  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和當前系統(tǒng)的類型概作,進行注冊
//返回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里面)
  • 創(chuàng)建XXXClient 實現IPushClient接口霎槐,并且重寫對應的方法送浊,initContext(Context),會在初始化的使用進行調用,可以在這里進行獲取第三方推送注冊需要的ID丘跌,KEY或者其他操作袭景,第三方推送ID、KEY闭树,建議在AndroidManifest.xml中的Application標簽下添加<meta/>浴讯,然后在initContext(Context)中進行獲取。

  • 創(chuàng)建和重寫三方消息推送的Receiver或者IntentService(一般第三方會讓你繼承他的receiver蔼啦,這里指的就是他)榆纽,重寫三方推送的的接收透傳消息和通知的方法,調用OneRepeater的transmitXXX方法捏肢,將通知奈籽、透傳消息、通知點擊事件鸵赫、以及其他事件衣屏,轉發(fā)到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) 轉發(fā)操作反饋(具體type在OnePush.TYPE_XXX)
transmitMessage(Context,String,String,Map<String,String>) 轉發(fā)透傳消息
transmitNotification(Context,int,String,String,Sting,Map<String,String>) 轉發(fā)通知
transmitNotificationClick(Context,int,String,String,Sting,Map<String,String>) 轉發(fā)通知點擊事件

四钻弄、OnePush消息推送測試

OnePush提供一個Java服務端消息推送的示例,大家可以使用它進行消息推送的測試者吁。

五窘俺、使用注意

  • BaseOnePushReceiver中的onReceiveNotification()方法,在使用的華為推送的時候复凳,該方法不會被調用瘤泪,因為華為推送沒有提供這樣的支持。
  • BaseOnePushReceiver中的onReceiveNotificationClick()方法育八,在使用華為推送的時候对途,雖然華為支持,但是如果app被華為一鍵清理掉后髓棋,收到通知实檀,那么點擊通知是不會調用華為推送的onEvent()方法惶洲,那么如果我們這里轉發(fā),onReceiveNotificationClick()是不會收到的劲妙。
  • 為了解決華為推送湃鹊,在手機上被清理掉后,onReceiveNotificationClick()不被調用的情況镣奋,OnePush在華為推送上币呵,使用跳轉到指定Activity的推送通知,那么服務端必須提供一個Intent序列化的uri侨颈,OnePush提供的Java服務端消息推送示例中余赢,已經提供了服務端序列化Intent的uri的實現(詳見:com.peng.one.push.service.huawei.intent.HWPushIntent)。
  • 使用OnePushService測試app的時候哈垢,需要修改Constant類的第三方推送id妻柒,否則將無法推送!當然你也可以使用第三方推送的web后臺耘分。

六举塔、華為推送服務端Intent序列化示例

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

七、開源地址

OnePush源代碼
使用介紹

八求泰、附點圖吧央渣,前面太多文字看著太累

小米推送 華為推送 友盟推送
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渴频,隨后出現的幾起案子芽丹,更是在濱河造成了極大的恐慌,老刑警劉巖卜朗,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拔第,死亡現場離奇詭異,居然都是意外死亡场钉,警方通過查閱死者的電腦和手機蚊俺,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惹悄,“玉大人春叫,你說我怎么就攤上這事∑郏” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵价匠,是天一觀的道長当纱。 經常有香客問我,道長踩窖,這世上最難降的妖魔是什么坡氯? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上箫柳,老公的妹妹穿的比我還像新娘手形。我一直安慰自己,他們只是感情好悯恍,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布库糠。 她就那樣靜靜地躺著,像睡著了一般涮毫。 火紅的嫁衣襯著肌膚如雪瞬欧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天罢防,我揣著相機與錄音艘虎,去河邊找鬼。 笑死咒吐,一個胖子當著我的面吹牛野建,可吹牛的內容都是我干的。 我是一名探鬼主播恬叹,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼候生,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妄呕?” 一聲冷哼從身側響起陶舞,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绪励,沒想到半個月后肿孵,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡疏魏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年停做,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片大莫。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛉腌,死狀恐怖,靈堂內的尸體忽然破棺而出只厘,到底是詐尸還是另有隱情烙丛,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布羔味,位于F島的核電站河咽,受9級特大地震影響,放射性物質發(fā)生泄漏赋元。R本人自食惡果不足惜忘蟹,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一飒房、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媚值,春花似錦狠毯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喂很,卻和暖如春惜颇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背少辣。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工凌摄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漓帅。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓锨亏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忙干。 傳聞我的和親對象是個殘疾皇子器予,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容