環(huán)境:
AndroidStudio3.2 + JPush SDK 3.0.8
需求:
項(xiàng)目要求根據(jù)不同的邏輯推送不同的內(nèi)容到手機(jī),手機(jī)狀態(tài)欄顯示通知(app未運(yùn)行時(shí))或彈窗提示(app正在運(yùn)行),根據(jù)不同的內(nèi)容點(diǎn)擊通知或彈窗選項(xiàng)后跳轉(zhuǎn)到相應(yīng)的頁(yè)面。
現(xiàn)狀:
根據(jù)官方文檔集成后后臺(tái)推送消息到極光服務(wù)器,后臺(tái)推送代碼如下:

根據(jù)官方文檔的說明和調(diào)試發(fā)現(xiàn),Android端集成好JPush SDK后,在不配置自己定義的Receiver,Android設(shè)備可以接收到服務(wù)器推送過來的Notificatio(見上面的第一張圖:極光推送后臺(tái)代碼中的setNotification方法),并在Android設(shè)備狀態(tài)欄生成一條Notification,該Notification的樣式可以自定義(通過JPushInterface.setPushNotificationBuilder方法來設(shè)置),但是點(diǎn)擊該Notification只能打開應(yīng)用的主頁(yè)面。

配置好自己定義的MyReceiver:


此時(shí)發(fā)送推送消息時(shí)Android端會(huì)收到兩條推送:

由極光默認(rèn)生成的Notification還是無法更改,不能實(shí)現(xiàn)點(diǎn)擊后根據(jù)需求跳轉(zhuǎn),于是咨詢了極光支持團(tuán)隊(duì),得到如下答復(fù):

解決:
根據(jù)極光的答復(fù),初步的解決方案應(yīng)該是要修改后臺(tái)代碼,生成PushPayload時(shí)只生成Message,不要Notification,或者推送的Notification中Message或Alert為空,這樣極光SDK就不會(huì)在狀態(tài)欄生成Notification,然后Android設(shè)備在Action為 cn.jpush.android.intent.MESSAGE_RECEIVED 的Receive中根據(jù)業(yè)務(wù)邏輯生成相應(yīng)的Notification并設(shè)置相應(yīng)的PendingIntent。
問題:
以上是我想到的初步解決方案,還需要和后臺(tái)、iOS的同事溝通協(xié)調(diào),上述記錄一是為整理思路,二是作個(gè)記錄,如果其他人遇到相似問題了可以做個(gè)參考,或者自己以后再遇到此問題時(shí)可以快速解決,后面和后臺(tái)、iOS的同事溝通之后再更新。