MUI接入個(gè)推推送與后臺(tái)聯(lián)調(diào)

需求:app通知欄收到推送,點(diǎn)擊通知欄推送可以進(jìn)入到不同的詳情頁(yè)(與后臺(tái)接口聯(lián)調(diào))


題記:上一篇文章在使用個(gè)推后臺(tái)發(fā)送json,有分析過(guò)MUI集成個(gè)推的流程。這一次主要是在實(shí)際開(kāi)發(fā)過(guò)程中,后臺(tái)接入個(gè)推SDK以后,兩端聯(lián)調(diào)工作。實(shí)際接入以后兩端聯(lián)調(diào)還是有些不同的。

Android

之前我們說(shuō)到,Android處理方式比較簡(jiǎn)單,只需要后臺(tái)按照規(guī)定透?jìng)髂0宓臄?shù)據(jù)結(jié)構(gòu)來(lái)即可。但是實(shí)際對(duì)接過(guò)程中我們發(fā)現(xiàn),按照透?jìng)髂0逑⑦^(guò)來(lái),點(diǎn)擊通知欄打開(kāi)app并不會(huì)走click監(jiān)聽(tīng)方法。根據(jù)論壇過(guò)來(lái)人的爬坑經(jīng)驗(yàn),我們找到一種替代方案,親測(cè)可用。原理如下:

如何獲得透?jìng)鲾?shù)據(jù)?剛才我說(shuō)過(guò)標(biāo)準(zhǔn)格式不觸發(fā)‘click’事件,那怎么獲得透?jìng)鲾?shù)據(jù),并打開(kāi)我們指定的頁(yè)面呢?這里需要使用到app的啟動(dòng)參數(shù)plus.runtime.arguments。如果app是啟動(dòng)狀態(tài),不管前臺(tái)還是后臺(tái),都可以用新意圖事件來(lái)獲得啟動(dòng)參數(shù),如果app是未啟動(dòng)狀態(tài),可以在plusReady里獲得啟動(dòng)參數(shù)。

        //獲取推送通知
        plus.push.addEventListener("receive", function (msg) {
            if (plus.os.name == "iOS") {
                XXX
            } else {//Android的在receive方法處理,不走click
                json = msg.payload;
                alert("Android json: " + JSON.stringify(json));
                alert("type : " + JSON.parse(json).type);
                openNewWindow(json);
            }
        }, false); 
        
        //獲取通知欄(app未啟動(dòng))點(diǎn)擊、第三方程序啟動(dòng)本app
        function openWebviewFromOthers() {
            var args = plus.runtime.arguments;
            if (args) {
                openNewWindow(args);
            }
        }

        function pushGetRun(msg) {
            alert("pushGetRun " + JSON.stringify(msg))
            //用參數(shù)打開(kāi)指定頁(yè)面
            openNewWindow(msg)
        }
    

在頁(yè)面創(chuàng)建的時(shí)候調(diào)用 openWebviewFromOthers(),此時(shí)我們可以完成了Android的推送流程。在receive方法中可以處理接收消息體。

iOS

上一篇文章中,針對(duì)iOS分析比較詳細(xì)了。在實(shí)際聯(lián)調(diào)中,還是有些小細(xì)節(jié)需要注意下。就比如我踩到的一個(gè)大坑就是,iOS在后臺(tái)的時(shí)候,走的是APS通道。在消息中心點(diǎn)開(kāi)以后,打開(kāi)APP會(huì)在click方法中監(jiān)聽(tīng)到兩次消息。這個(gè)問(wèn)題讓我百思不得其解,后來(lái)查了很多資料才發(fā)現(xiàn)蘋(píng)果有個(gè)content-available的參數(shù),默認(rèn)是置為1的,但是我們這里需要置為0。有興趣可以自行百度看看。

所以,app在前臺(tái)的時(shí)候我們依舊走的是receive方法生成一個(gè)本地通知,在收到的json中,和后臺(tái)約定一個(gè)字段用來(lái)替換成你自定義標(biāo)識(shí)的字段,這個(gè)操作的目的是區(qū)分本地消息和透?jìng)飨ⅰ?/p>

         //我這里是根據(jù)約定的msgType字段判斷
         plus.push.addEventListener("receive", function (msg) {
            if (plus.os.name == "iOS") {
                alert("獲取本地推送: " + JSON.stringify(msg));
                if (JSON.parse(msg.content).msgType != "LocalMSG") {
                    //本地推送
                    createLocalPushMsg(msg);
                }
            } else {//Android的在receive方法處理,不走click
              XXX
            }
        }, false);
    
    
        //創(chuàng)建本地消息
        function createLocalPushMsg(msg) {
            var options = {cover: false};
            var msgJson = JSON.parse(msg.content);
            /**
             * 把msgType字段替換,該消息即為本地生成的消息,
             * 不會(huì)在receive方法中重復(fù)收到
             */
            msgJson.msgType = "LocalMSG";
            plus.push.createMessage(msg.payload.content, JSON.stringify(msgJson), options);
        }

然后在click方法中,我們可以統(tǒng)一處理接收到的iOS消息,而不需要區(qū)分是否為本地消息:

        //點(diǎn)擊推送進(jìn)來(lái)
        plus.push.addEventListener("click", function (msg) {
            // alert(JSON.stringify(msg));
            if (plus.os.name == "iOS") {
                json = msg.payload;
                json = isJSON(json) ? JSON.parse(json) : json;
                alert("iOS : " + JSON.stringify(json));
                alert("iOS type字段: " + json.type);
            }
            openNewWindow(json);
        }, false);
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 不知從什么時(shí)候開(kāi)始,總覺(jué)的編程似乎離算法很遠(yuǎn)了,但是最近發(fā)覺(jué)這種想法和可怕,如果只當(dāng)代碼的搬運(yùn)工,想想是那么可怕,...
    后浪普拉斯閱讀 206評(píng)論 0 0
  • 這兩個(gè)會(huì)都是VIS年會(huì)的重要組成部分,收錄的文章相似,但還是有些區(qū)別。具體細(xì)節(jié)可參考VIS會(huì)議的官方網(wǎng)站: Inf...
    浮云匿晨暉閱讀 3,859評(píng)論 0 2
  • 今天。沒(méi)人再理你。明天會(huì)有人離開(kāi)你。過(guò)年好。祝你們天天開(kāi)心快樂(lè)。
    劉錫明閱讀 229評(píng)論 1 1
  • 我畢業(yè)的那年 父母到俄羅斯做生意去了 我家樓前有個(gè)夜總會(huì)開(kāi)業(yè)了 我空蕩蕩的房子租給在 夜總會(huì)上班幾個(gè)鮮艷的女孩了 ...
    云水夢(mèng)閱讀 231評(píng)論 0 0

友情鏈接更多精彩內(nèi)容