聊聊關(guān)于APP推送那些事,分析各個(gè)端都是怎么協(xié)作完成推送任務(wù)的
原創(chuàng)【51CTO.com原創(chuàng)稿件】推送功能已經(jīng)成為APP里面必備的一個(gè)功能,利用推送,我們除了能夠?qū)衢T(mén)信息推送給用戶(hù)外,還能夠?qū)⒁恍┖陀脩?hù)本人相關(guān)的信息推送給用戶(hù),那么兩種類(lèi)型的推送都是怎么樣的呢?要實(shí)現(xiàn)兩種推送,我們應(yīng)該怎么做?
看到上圖是不是很有親切感呢?打開(kāi)很多APP的時(shí)候,我們都會(huì)發(fā)現(xiàn)這樣一個(gè)有趣的事情,就是這些APP會(huì)推送各種各樣的信息給我們,比如某條新聞熱點(diǎn),某個(gè)用戶(hù)評(píng)論、收藏和分享了我的文章,甚至有些商城類(lèi)APP還會(huì)推送發(fā)貨、退貨、優(yōu)惠通知等等,下面我們就來(lái)聊聊關(guān)于推送的相關(guān)知識(shí)。
一個(gè)簡(jiǎn)單的人為消息推送輕架構(gòu)
上圖是一個(gè)用于生產(chǎn)環(huán)境的推送輕架構(gòu)圖,從圖中我們能夠看到,首先由我們的內(nèi)容編輯工作者從管理后臺(tái)選擇要推送的新聞、視頻等等內(nèi)容,然后后端程序通過(guò)SDK或者HTTP API將這些推送的內(nèi)容傳遞給推送服務(wù)端,推送服務(wù)端接收到這些即將推送的消息之后,經(jīng)過(guò)一系列的處理,然后依次發(fā)送給APP里面的客戶(hù)端,APP里面的客戶(hù)端收到推送消息之后,將推送消息顯示在我們的手機(jī)狀態(tài)欄,從而得到我們最后看到的推送。
雖然推送程序是一個(gè)C/S程序,但是很大部分個(gè)人或者企業(yè)都是不會(huì)自己去開(kāi)發(fā)推送的,而是借助市場(chǎng)上已經(jīng)提供的現(xiàn)成推送框架來(lái)實(shí)現(xiàn)推送的功能,目前市場(chǎng)上的推送框架主要有:小米推送、百度推送、友盟推送等等。
消息生產(chǎn)者 & 消息消費(fèi)者
上面聊了一種基于人為的推送,所有要推送的消息都是由我們?nèi)藶檫x擇的,并且普遍都是將其推送到所有的APP用戶(hù),但是對(duì)于一些特殊的推送,就只能夠推送給某個(gè)用戶(hù)了,比如發(fā)貨通知、VIP到期通知、會(huì)員續(xù)費(fèi)通知等等的推送,因?yàn)橹会槍?duì)某個(gè)用戶(hù),所以這時(shí)候我們只能夠用程序的方式來(lái)代替人類(lèi)完成推送,不過(guò)實(shí)現(xiàn)都是一樣的,只不過(guò)要推送的內(nèi)容由程序生成而已,那么怎么才能夠做到推送給某個(gè)用戶(hù)呢?
其實(shí)在我們的推送框架里面,對(duì)于每個(gè)APP都有一個(gè)推送的唯一標(biāo)識(shí),比如小米推送就是用regid來(lái)表示,有了這個(gè)唯一標(biāo)識(shí),我們可以在用戶(hù)登錄APP的時(shí)候,將這個(gè)唯一標(biāo)識(shí)和我們的用戶(hù)UID綁定起來(lái),這樣我們就能夠?qū)⒃揢ID產(chǎn)生的各種消息推送給他了。
一個(gè)輕型小巧的自動(dòng)消息推送架構(gòu)
上面簡(jiǎn)單聊了怎么將用戶(hù)和推送標(biāo)識(shí)符關(guān)聯(lián)起來(lái),下面我們來(lái)聊聊怎么實(shí)現(xiàn)一個(gè)非人為消息推送架構(gòu),將和用戶(hù)相關(guān)的信息推送給他。
在上圖中,我們采用了redis的訂閱發(fā)布來(lái)實(shí)現(xiàn)消息的生產(chǎn)與消費(fèi),所謂redis訂閱就是訂閱某個(gè)通道的消息,然后當(dāng)這個(gè)通道有消息之后,Redis服務(wù)端會(huì)將其發(fā)送過(guò)來(lái),所謂redis發(fā)布消息就是將應(yīng)用產(chǎn)生的各種消息保存到Redis服務(wù)端的某個(gè)通道里面,我們這里只是選擇稍微簡(jiǎn)單的一種實(shí)現(xiàn)方式,當(dāng)然你還可以使用前面介紹的MQ來(lái)實(shí)現(xiàn)。
推送存在的弊端
由于現(xiàn)在很多APP都有推送功能,導(dǎo)致我們的手機(jī)每天都會(huì)收到很多推送,所以很多用戶(hù)會(huì)選擇將一些不重要的APP推送功能權(quán)限關(guān)閉了,這樣我們的推送就無(wú)法到達(dá)用戶(hù)的APP了,推送的意義也就不存在了。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】