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