友盟官方文檔:https://developer.umeng.com/docs/67966/detail/153908
第一次認(rèn)真集成推送,碰到了一些問題,記錄一下肺稀。
首先講一下實(shí)現(xiàn)原理揣非,我們用的是友盟翔忽。Android比iOS要麻煩很多瘪吏。
友盟集成是需要后端配合的卓研,具體就是后端調(diào)用友盟的接口趴俘,向友盟推送一條消息,然后友盟再向在他們平臺(tái)注冊(cè)過的app發(fā)送一條消息奏赘,我們要做的就是把接收到的消息展示出來寥闪。
需求:用戶要能在各個(gè)時(shí)候都能收到我們APP的推送,并且能對(duì)應(yīng)打開不同的界面
解決方法:集成友盟磨淌,但是Android只簡(jiǎn)單集成友盟是不行的疲憋,在APP被殺死以后,就接收不到通知了梁只,所以需要額外集成廠商通道缚柳。另一個(gè)和iOS不一樣的就是,iOS在打開當(dāng)前APP的時(shí)候搪锣,可以收到橫幅推送喂击,但是Android需要自己做。
什么是廠商通道:
由于國(guó)內(nèi)手機(jī)廠商過多地使用應(yīng)用庇傧瑁活方案實(shí)現(xiàn)消息推送功能,因此導(dǎo)致手機(jī)耗電加快佩谷、卡頓旁壮。國(guó)內(nèi)部分手機(jī)廠商發(fā)現(xiàn)了這一問題,自己推出了消息推送服務(wù)谐檀。這些手機(jī)廠商通過進(jìn)程管理抡谐,殺死后臺(tái)進(jìn)程,并提供消息推送能力桐猬,讓消息通過手機(jī)廠商官方推送通道下發(fā)到應(yīng)用程序中麦撵。這類典型的手機(jī)廠商有小米、華為等溃肪。
1.集成步驟
大致分為兩部分:
正常推送集成免胃。
五大廠商通道集成。
1.1 正常推送集成
詳見友盟官方文檔:https://developer.umeng.com/docs/67966/detail/153908
點(diǎn)擊推送信息以后的處理惫撰,收到推送的時(shí)候的回調(diào)
UmengNotificationClickHandler notificationClickHandler =new UmengNotificationClickHandler() {
@Override
? ? public void dealWithCustomAction(Context context, UMessage msg) {
? ? ?//點(diǎn)擊推送通知以后的處理
? ? ? ? Log.i(TAG,"notificationClickHandler "+msg);
? ? }
};
UmengMessageHandler messageHandler =new UmengMessageHandler() {
@Override
? ? public void dealWithCustomMessage(final Context context, final UMessage msg) {
Log.i(TAG,"message "+msg);
? ? }
@Override
? ? public NotificationgetNotification(Context context, UMessage uMessage) {
? ? ?//手機(jī)收到推送的時(shí)候的回調(diào)
? ? ? ? Log.i(TAG,"message ");
? ? ? ? //返回默認(rèn)構(gòu)造
? ? ? ? return super.getNotification(context, uMessage);
? ? }
};
mPushAgent.setNotificationClickHandler(notificationClickHandler);
mPushAgent.setMessageHandler(messageHandler);
設(shè)置最多能看到的推送條數(shù)
mPushAgent.setDisplayNotificationNumber(3);
?如果需求中需要打開APP中某個(gè)界面羔沙,責(zé)需要觀察 "after_open"字段,默認(rèn)是? "go_app",需要服務(wù)端同學(xué)配合
{
? ? "msg_id": "uu481201399440513912",
? ? "display_type": "notification",
? ? "alias": "",
? ? "random_min": 0,
? ? "body": {
? ? ? ? "title": "測(cè)試自定義參數(shù)",
? ? ? ? "ticker": "測(cè)試自定義參數(shù)",
? ? ? ? "text": "無",
? ? ? ? "after_open": "go_app",
? ? ? ? "url": "",
? ? ? ? "activity": "",
? ? ? ? "custom": "",
? ? ? ? "play_vibrate": "true",
? ? ? ? "play_sound": "true",
? ? ? ? "play_lights": "true"
? ? },
? ? "extra": {
? ? ? ? "key1": "value1",
? ? ? ? "key2": "value2"
? ? }
}
成功以后可以看log
主要看after_open厨钻,默認(rèn)是打開app
2.集成中碰到的問題
友盟官方常見問題:https://developer.umeng.com/docs/67966/cate/66637
1.集成以后收不到推送
(1) mPushAgent.register()要放在application中調(diào)用扼雏,放在別的地方不起作用
(2) 檢查so文件有沒有放錯(cuò)地方
(3) 打開日志提示坚嗜,仔細(xì)看提示:UMConfigure.setLogEnabled(true)
2.java.lang.ClassNotFoundException: com.ut.mini.UTAnalytics
盡量更新到最新版本的引用,友盟開發(fā)說這個(gè)只是提示诗充,不用太在意....
3.殺死進(jìn)程以后收不到推送
解決方法:集成各個(gè)廠商通道
iOS的小伙伴集成以后苍蔬,就算殺死APP也可以收到推送,為啥Android不可以蝴蜓,傷感碟绑,看了文檔才知道,我們要集成廠商通道励翼,
4.集成以后收不到推送蜈敢,顯示送達(dá)卻沒有彈出通知
manifest里面的package最好與build.gradle中的applicationId不一 致,因?yàn)槲覀冺?xiàng)目有兩個(gè)applicationId汽抚,所以會(huì)出現(xiàn)這種情況
需調(diào)用setResourcePackageName設(shè)置資源文件包名