MUI使用個(gè)推推送流程分析

需求:app通知欄收到推送,點(diǎn)擊通知欄推送可以進(jìn)入到不同的詳情頁(使用個(gè)推后臺(tái)調(diào)試數(shù)據(jù))


1则奥、監(jiān)聽方法分析

  • receive方法:
    當(dāng)APP在前臺(tái)的時(shí)候考润,可以監(jiān)聽接收透?jìng)飨ⅲ珹PP不在前臺(tái)的時(shí)候無法監(jiān)聽
 plus.push.addEventListener("receive", function (msg) {
 }
  • click方法:
    1逞度、iOS APP處于后臺(tái)额划,透?jìng)飨?huì)變成通知提醒,此時(shí)點(diǎn)擊通知觸發(fā)
    2档泽、點(diǎn)擊本地設(shè)置的推送到通知欄的通知
plus.push.addEventListener("click", function (msg) {
}

2俊戳、技術(shù)分析

通知欄通知:

  • iOS
    在個(gè)推中,iOS 只有透?jìng)饕痔ィ瑳]有通知燥滑。當(dāng)APP不在前臺(tái)時(shí),透?jìng)髦辉谕ㄖ獧谔嵝寻⑻樱c(diǎn)擊走click方法處理業(yè)務(wù)铭拧;
  • Android
    APP透?jìng)飨⒍疾粫?huì)出現(xiàn)在通知欄,有兩種處理方式:
    1恃锉、個(gè)推發(fā)送通知(但是點(diǎn)擊通知只能打開APP搀菩、打開鏈接、下載應(yīng)用)
    2破托、收到透?jìng)飨⒑蠓景希镜厣赏ㄖ酵ㄖ獧冢▋H限于APP處于前臺(tái),receive方法中處理)

透?jìng)飨ⅲ?/h4>
  • APP處于前臺(tái)才可接收到土砂,APP處于后臺(tái)無法接收州既。且接收透?jìng)飨r(shí),不可以直接做跳轉(zhuǎn)頁面等業(yè)務(wù)處理萝映,業(yè)務(wù)處理跳轉(zhuǎn)等需在點(diǎn)擊通知欄后進(jìn)行相應(yīng)處理吴叶。


3、工欲善其事必先利其器序臂,先看官方常見問題:

image.png

4蚌卤、邏輯處理:

iOS

  • APP處于前臺(tái):

服務(wù)器端推送透?jìng)飨⒑螅苯釉趓eceive方法監(jiān)聽到:


iOS APP處于前臺(tái).png

但是這不是我們要的奥秆。我們需要的是用戶收到消息后在通知欄出現(xiàn)造寝,而不是直接在receive方法中做業(yè)務(wù)處理。那么我們可以看下上面官方常見問題第三點(diǎn)吭练,我們需要在消息中心創(chuàng)建一個(gè)本地消息:

plus.push.createMessage( str, "LocalMSG", options );

通過點(diǎn)擊通知中心的這個(gè)本地消息,進(jìn)入app實(shí)現(xiàn)click方法監(jiān)聽處理業(yè)務(wù)析显。
那么問題來了鲫咽,經(jīng)過測(cè)試我們發(fā)現(xiàn),在創(chuàng)建本地消息的時(shí)候(receive方法中)谷异,APP一定是處于前臺(tái)的分尸,那么創(chuàng)建了本地通知以后,我們的receive方法一定會(huì)監(jiān)聽到歹嘹,這樣不就進(jìn)入到一個(gè)死循環(huán)了么箩绍?

receive監(jiān)聽 -> 創(chuàng)建本地通知 -> receive再監(jiān)聽到本地通知 -> 再創(chuàng)建本地通知。尺上。材蛛。

子子孫孫無窮盡也圆到。

那么我們可以根據(jù)參考常見問題的第三點(diǎn):用戶在創(chuàng)建IOS本地消息是可以在“payload”節(jié)點(diǎn)添加特殊標(biāo)記對(duì)消息進(jìn)行區(qū)分。
這玩意是在創(chuàng)建消息的時(shí)候卑吭,官方模板自帶的一個(gè)參數(shù)芽淡。在個(gè)推后臺(tái)iOS透?jìng)鞯臅r(shí)候,有一個(gè):

image.png

這個(gè)其實(shí)只是就是把payload參數(shù)的值變成你的透?jìng)飨son豆赏,那么本地創(chuàng)建通知的時(shí)候這個(gè)值是什么呢挣菲?我們看上面創(chuàng)建本地通知的時(shí)候,第二個(gè)參數(shù)LocalMSG掷邦,這個(gè)就是我們自定義在本地推送的時(shí)候的payload參數(shù)的值白胀。所以,在receive方法中抚岗,我們根據(jù)payload參數(shù)的值是不是我們?cè)O(shè)定的LocalMSG就可以判斷監(jiān)聽到的推送是不是本地創(chuàng)建的了或杠。

  • APP處于后臺(tái):

當(dāng)APP處于后臺(tái),receive方法監(jiān)聽不到消息苟跪,此時(shí)消息走消息中心推送廷痘,點(diǎn)擊后進(jìn)入APP內(nèi),走click方法處理業(yè)務(wù)件已,滿足需求笋额。


iOS APP處于后臺(tái).png

Android

根據(jù)常見問題第二點(diǎn),我們知道在處理Android消息的時(shí)候篷扩,需要使用標(biāo)準(zhǔn)格式的透?jìng)鱦son:

{title:"通知標(biāo)題",content:"通知內(nèi)容",payload:"通知去干嘛這里可以自定義"}

這樣兄猩,透?jìng)飨⒕筒粫?huì)走receive方法,而是像我們需求那樣實(shí)現(xiàn)所有通知進(jìn)入通知中心鉴未,點(diǎn)擊通知中心走click方法處理枢冤。如果不按照此格式來,消息不會(huì)走消息中心铜秆,而是直接走監(jiān)聽的receive方法(APP在前臺(tái)時(shí)淹真,不在前臺(tái)時(shí),透?jìng)飨⑸踔帘O(jiān)聽不到)连茧。

Android APP消息流程梳理.png
需要注意的一點(diǎn)是:

Android透?jìng)鞲袷絳"title":"通知1","content":"通知內(nèi)容","payload":"{"type":"notify","payload":"通知去干嘛這里可以自定義"}"}如果想要傳輸自定義json核蘸,賦值給payload,但是里面的json必須是轉(zhuǎn)義過后的啸驯,且任何和官方規(guī)定格式在同一層的字段都是無效的客扎,例如:
{"id":"123","title":"通知1","content":"通知內(nèi)容","payload":"{type:\"notify\",ids:\"456\"}"}
這里面第一個(gè)id:"123"在實(shí)際接收到的時(shí)候并不會(huì)存在。

5罚斗、總結(jié)

其實(shí)扯了一大堆徙鱼,簡(jiǎn)而言之就是一句話:

Android推送的時(shí)候要注意后臺(tái)返回的json滿足官方格式即可,iOS推送要注意當(dāng)APP在前臺(tái)的時(shí)候针姿,在receive方法監(jiān)聽的時(shí)候判斷是否是本地通知袱吆。

下面是我的部分關(guān)鍵代碼厌衙,alart()是測(cè)試階段為了看到效果加的:

        //獲取推送通知
        plus.push.addEventListener("receive", function (msg) {
            alert("接收到的透?jìng)魍扑?" + JSON.stringify(msg));
            if (plus.os.name == "iOS") {
                switch (msg.payload) {
                    case "LocalMSG":
                        alert("本地創(chuàng)建消息的 " + JSON.stringify(msg));
                        break;
                    default:
                        //測(cè)試本地推送
                        createLocalPushMsg(msg);
                        break;
                }
            }
        }, false);
        //點(diǎn)擊推送進(jìn)來
        plus.push.addEventListener("click", function (msg) {
            // 判斷是從本地創(chuàng)建還是離線推送的消息
            alert("點(diǎn)擊處理消息 " + JSON.stringify(msg));
        }, false);
        //創(chuàng)建本地消息
        function createLocalPushMsg(msg) {
            var options = {cover: false};
            plus.push.createMessage(msg.content, "LocalMSG", options);
            if (plus.os.name == "iOS") {
                outLine('*如果無法創(chuàng)建消息,請(qǐng)到"設(shè)置"->"通知"中配置應(yīng)用在通知中心顯示!');
            }
        }
本文參考的官方文檔附上
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杆故,一起剝皮案震驚了整個(gè)濱河市迅箩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌处铛,老刑警劉巖饲趋,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異撤蟆,居然都是意外死亡奕塑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門家肯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來龄砰,“玉大人,你說我怎么就攤上這事讨衣』慌铮” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵反镇,是天一觀的道長(zhǎng)固蚤。 經(jīng)常有香客問我,道長(zhǎng)歹茶,這世上最難降的妖魔是什么夕玩? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮惊豺,結(jié)果婚禮上燎孟,老公的妹妹穿的比我還像新娘。我一直安慰自己尸昧,他們只是感情好揩页,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烹俗,像睡著了一般碍沐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衷蜓,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音尘喝,去河邊找鬼磁浇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛朽褪,可吹牛的內(nèi)容都是我干的置吓。 我是一名探鬼主播无虚,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼衍锚!你這毒婦竟也來了友题?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤戴质,失蹤者是張志新(化名)和其女友劉穎度宦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體告匠,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戈抄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了后专。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片划鸽。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戚哎,靈堂內(nèi)的尸體忽然破棺而出裸诽,到底是詐尸還是另有隱情,我是刑警寧澤型凳,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布丈冬,位于F島的核電站,受9級(jí)特大地震影響啰脚,放射性物質(zhì)發(fā)生泄漏殷蛇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一橄浓、第九天 我趴在偏房一處隱蔽的房頂上張望粒梦。 院中可真熱鬧,春花似錦荸实、人聲如沸匀们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泄朴。三九已至,卻和暖如春露氮,著一層夾襖步出監(jiān)牢的瞬間祖灰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工畔规, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留局扶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像三妈,于是被迫代替她去往敵國(guó)和親畜埋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,310評(píng)論 25 707
  • 前言 本文是一篇轉(zhuǎn)載文章畴蒲,在這一篇實(shí)用的文章里悠鞍,你可以按照上面的步驟實(shí)現(xiàn)不借助第三方和服務(wù)器端,自己給自己的設(shè)備發(fā)...
    進(jìn)無盡閱讀 1,675評(píng)論 6 6
  • 版權(quán)聲明 本文翻譯自:raywenderlich.com 原文作者: Jack Wu 譯者: JMStack 轉(zhuǎn)載...
    jmstack閱讀 7,129評(píng)論 6 30
  • 寫作原因:網(wǎng)上看了很多推送文章都沒有完美的解答我的疑惑模燥;主要有以下兩點(diǎn)咖祭,1:推送來了我點(diǎn)擊應(yīng)用圖標(biāo)進(jìn)入應(yīng)用怎么取到...
    Thebloodelves閱讀 4,517評(píng)論 26 71
  • 叔本華說:“人生像鐘擺,在欲望和痛苦之間搖擺涧窒,欲望未滿足之前是痛苦心肪,滿足之后是空虛,所以快樂永無可能纠吴∮舶埃” 生活、現(xiàn)...
    深_藍(lán)_閱讀 363評(píng)論 2 1