plus.push.addEventListener("receive", function (msg) {
}
複製代碼
plus.push.addEventListener("click", function (msg) {
}
複製代碼
通知欄通知:
- iOS
在個推中,iOS 只有透傳,沒有通知。當APP不在前臺時,透傳只在通知欄提醒,點擊走click方法處理業務;- Android
APP透傳消息都不會出如今通知欄,有兩種處理方式:
一、個推發送通知(可是點擊通知只能打開APP、打開連接、下載應用)
二、收到透傳消息後,本地生成通知到通知欄(僅限於APP處於前臺,receive方法中處理)
透傳消息:
- APP處於前臺纔可接收到,APP處於後臺沒法接收。且接收透傳消息時,不能夠直接作跳轉頁面等業務處理,業務處理跳轉等需在點擊通知欄後進行相應處理。
服務器端推送透傳消息後,直接在receive方法監聽到:javascript
可是這不是咱們要的。咱們須要的是用戶收到消息後在通知欄出現,而不是直接在receive方法中作業務處理。那麼咱們能夠看下上面官方常見問題第三點,咱們須要在消息中心建立一個本地消息:css
plus.push.createMessage( str, "LocalMSG", options );
複製代碼
經過點擊通知中心的這個本地消息,進入app實現click方法監聽處理業務。
那麼問題來了,通過測試咱們發現,在建立本地消息的時候(receive方法中),APP必定是處於前臺的,那麼建立了本地通知之後,咱們的receive方法必定會監聽到,這樣不就進入到一個死循環了麼?java
receive監聽 -> 建立本地通知 -> receive再監聽到本地通知 -> 再建立本地通知。。。json
子子孫孫無窮盡也。服務器
那麼咱們能夠根據參考常見問題的第三點:用戶在建立IOS本地消息是能夠在「payload」節點添加特殊標記對消息進行區分。
這玩意是在建立消息的時候,官方模板自帶的一個參數。在個推後臺iOS透傳的時候,有一個:app
這個其實只是就是把payload參數的值變成你的透傳消息json,那麼本地建立通知的時候這個值是什麼呢?咱們看上面建立本地通知的時候,第二個參數LocalMSG,這個就是咱們自定義在本地推送的時候的payload參數的值。因此,在receive方法中,咱們根據payload參數的值是否是咱們設定的LocalMSG就能夠判斷監聽到的推送是否是本地建立的了。測試
當APP處於後臺,receive方法監聽不到消息,此時消息走消息中心推送,點擊後進入APP內,走click方法處理業務,知足需求。ui
根據常見問題第二點,咱們知道在處理Android消息的時候,須要使用標準格式的透傳json:spa
{title:"通知標題",content:"通知內容",payload:"通知去幹嗎這裏能夠自定義"}
複製代碼
這樣,透傳消息就不會走receive方法,而是像咱們需求那樣實現全部通知進入通知中心,點擊通知中心走click方法處理。若是不按照此格式來,消息不會走消息中心,而是直接走監聽的receive方法(APP在前臺時,不在前臺時,透傳消息甚至監聽不到)。調試
須要注意的一點是:
Android透傳格式{"title":"通知1","content":"通知內容","payload":"{"type":"notify","payload":"通知去幹嗎這裏能夠自定義"}"}若是想要傳輸自定義json,賦值給payload,可是裏面的json必須是轉義事後的,且任何和官方規定格式在同一層的字段都是無效的,例如:
{"id":"123","title":"通知1","content":"通知內容","payload":"{type:\"notify\",ids:\"456\"}"}
這裏面第一個id:"123"
在實際接收到的時候並不會存在。
其實扯了一大堆,簡而言之就是一句話:
Android推送的時候要注意後臺返回的json知足官方格式便可,iOS推送要注意當APP在前臺的時候,在receive方法監聽的時候判斷是不是本地通知。
下面是個人部分關鍵代碼,alart()是測試階段爲了看到效果加的:
//獲取推送通知
plus.push.addEventListener("receive", function (msg) {
alert("接收到的透傳推送 " + JSON.stringify(msg));
if (plus.os.name == "iOS") {
switch (msg.payload) {
case "LocalMSG":
alert("本地建立消息的 " + JSON.stringify(msg));
break;
default:
//測試本地推送
createLocalPushMsg(msg);
break;
}
}
}, false);
複製代碼
//點擊推送進來
plus.push.addEventListener("click", function (msg) {
// 判斷是從本地建立仍是離線推送的消息
alert("點擊處理消息 " + JSON.stringify(msg));
}, false);
複製代碼
//建立本地消息
function createLocalPushMsg(msg) {
var options = {cover: false};
plus.push.createMessage(msg.content, "LocalMSG", options);
if (plus.os.name == "iOS") {
outLine('*若是沒法建立消息,請到"設置"->"通知"中配置應用在通知中心顯示!');
}
}
複製代碼