App消息推送 實現原理

1.消息推送的實質

   實際上,是當服務器有新消息需推送給用戶時,先發送給應用App,應用App再發送給用戶

        

2. 作用

         產品角度:功能需要,如:資訊類產品的新聞推送、工具類產品的公告推送等等

        運營角度:活動運營需要,如:電商類產品的促銷活動;召回用戶 / 提高活躍度等等

        作爲開發者,不要有需求就接,應該多思考、多理解用戶 / 功能的使用場景,有助於我們更好地去選擇合適的開發方式

3.原理

4.七種主流的消息推送方式

1.C2DM

Cloud to Device Messaging,雲端推送,是Android系統級別的消息推送服務(Google出品)

C2DM服務負責處理諸如消息排隊等事務,並向運行於目標設備上的應用程序分發這些消息。

優點:
C2DM提供了一個簡單的、輕量級的機制,允許服務器可以通知移動應用程序直接與服務器進行通信,以便於從服務器獲取應用程序更新和用戶數據。
缺點:
依賴於Google官方提供的C2DM服務器,但在國內使用Google服務需要翻牆,成本較大;
需要用戶手機安裝Google服務。但由於Android機型、系統的碎片化 & 國內環境,國內的Android系統都自動去除Google服務,假如要使用C2DM服務,這意味着用戶還得去安裝Google服務,成本較大。

2.輪詢

   基於Pull方式,應用程序隔固定時間主動與服務器進行連接並查詢是否有新的消息
優點:
實時性好
缺點:
成本大,需要自己實現與服務器之間的通信,例如消息排隊等;

到達率不確定,考慮輪詢的頻率:太低可能導致消息的延遲;太高,更費客戶端的資源(CPU資源、網絡流量、系統電量)和服務器資源(網絡帶寬)

3.SMS信令推送

   基於Push方式,服務器有新消息時,發送1條類似短信的信令給客戶端,客戶端通過攔截信令,解析消息內容 / 向服務器獲取信息
優點 :可實現完全的實時操作

缺點 :成本高(主要是短信資費的支出)

4.MQTT協議

輕量級的消息發佈/訂閱協議,基於Push方式,wmqtt.jar 是IBM提供的MQTT協議的實現,原理如下圖:

5.XMPP協議

定義
Extensible Messageing and Presence Protocol,可擴展消息與存在協議,是基於可擴展標記語言(XML)的協議,是目前主流的四種IM協議之一
其他三種:
即時信息和空間協議(IMPP)
空間和即時信息協議(PRIM)
即時通訊和空間平衡擴充的進程開始協議SIP(SIMPLE)

原理: XMPP中定義了三個角色,分別是客戶端、服務器和網關

客戶端
通過 TCP/IP與XMPP 服務器連接,然後在之上傳輸與即時通訊相關的指令(XML);
解析組織好的 XML 信息包;
理解消息數據類型。
XMPP的核心:XML流傳輸協議(在網絡上分片斷髮送XML的流協議),也是即時通訊指令的傳遞基礎,即XMPP用TCP傳的是XML流
與即時通訊相關的指令,在以前要麼用2進制的形式發送(比如QQ),要麼用純文本指令加空格加參數加換行符的方式發送(比如MSN)。
XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。
服務器

監聽客戶端連接,並直接與客戶端應用程序通信(客戶端信息記錄)
與其他 XMPP 服務器通信;
網關:與異構即時通信系統進行通信
異構系統包括SMS(短信),MSN,ICQ等
通信能夠在這三者的任意兩個之間雙向發生。

原理流程

原理流程
優點
開源:可通過修改其源代碼來適應我們的應用程序。
簡單:XML易於解析和閱讀;將複雜性從客戶端轉移到了服務器端
可拓展性強:繼承了在XML環境中靈活的發展性,可進一步對協議進行擴展,實現更爲完善的功能。
GTalk、QQ、IM等都用這個協議
缺點
如果將消息從服務器上推送出去,則不管消息是否成功到達客戶端手機上。

源碼實例:有一個很棒的基於XMPP協議的java開源Android push notification:Androidpn項目地址,大家有興趣可以去看看

6. 使用第三方平臺

現今主流的推送平臺分爲
手機廠商類:小米推送、華爲推送。
第三方平臺類:友盟推送、極光推送(大部分公司都在使用,開源)、雲巴(基於MQTT)
BAT大廠的平臺推送:阿里雲移動推送、騰訊信鴿推送、百度雲推送
具體各推送平臺的優缺點請看我寫的文章:Android推送:第三方消息推送平臺詳細解析

7. 自己搭建
如果你的產品對於消息推送具備較高的功能和性能要求,同時對安全性要求非常高的話,自己搭建可能是最好的方式,但這種方式無疑成本是最高的。
 

 

一張圖片概括其中主流消息推送方式

在這裏插入圖片描述

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章