史上最全解析Android訊息推送解決方案

Carson_Ho發表於2017-05-15

史上最全解析Android訊息推送解決方案

前言

  • 訊息推送在Android開發中應用的場景是越來越多了,比如說電商產品進行活動宣傳、資訊類產品進行新聞推送等等,如下圖:

    史上最全解析Android訊息推送解決方案
    推送訊息截圖

  • 本文將介紹Android中實現訊息推送的7種主流解決方案


目錄

史上最全解析Android訊息推送解決方案
目錄


1.定義

在使用者未開啟App時,App主動向使用者推送伺服器最新訊息。如下圖:

史上最全解析Android訊息推送解決方案

訊息推送的本質是:App將伺服器更新的資訊推送給使用者

2.作用

  • 產品的角度:功能需要,比如說資訊類產品的新聞推送、工具類產品的公告推送等等
  • 運營的角度:活動運營需要,比如說電商類產品的促銷活動;召回使用者 / 提高活躍度等等

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

3.儲備知識

3.1 作業系統有自身的訊息推送功能(系統級別)

  • 系統級別:任何時候都可以推送給使用者,且不會被系統殺死
  • Android的訊息推送服務稱為:C2DM(Cloudto Device Messaging)

    將在下面詳細描述

3.2 推送的本質與原理

  • 訊息推送的本質是:App將伺服器更新的資訊推送給使用者,即App獲取伺服器資訊,再推送給使用者

  • App從伺服器獲取最新訊息有兩種基本方式(原理):Push和Pull

    1. 主動獲取方式(Pull)
      客戶端隔固定時間主動向伺服器獲取資訊,看是否有更新的資訊;若有更新資訊,則傳送到客戶端

    2. 被動接受方式(Push)
      當伺服器有更新資訊時主動傳送到客戶端

  • 對比:Push方式比Pull方式更優越。因為採用Pull方式時客戶端需要不停地去監測伺服器的變化,更費客戶端的資源(CPU資源、網路流量、系統電量)

4. 解決方案

經總結,Android中實現訊息推送的有7種主流解決方案,接下來將一一介紹。

4.1 C2DM

  • 定義:Cloud to Device Messaging,雲端推送

    Android系統級別的訊息推送服務-Google出品

  • 原理:基於Push方式,C2DM服務負責處理諸如訊息排隊等事務,並向執行於目標裝置上的應用程式分發這些訊息。如下圖:

史上最全解析Android訊息推送解決方案
C2DM原理

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

4.2 輪詢

  • 原理:基於Pull方式,應用程式隔固定時間主動與伺服器進行連線並查詢是否有新的訊息
  • 缺點:
    1. 成本大,需要自己實現與伺服器之間的通訊,例如訊息排隊等;
    2. 到達率不確定,考慮輪詢的頻率:太低可能導致訊息的延遲;太高,更費客戶端的資源(CPU資源、網路流量、系統電量)和伺服器資源(網路頻寬)

4.3 SMS

  • 定義:簡訊傳送
  • 原理:基於Push方式,通過攔截SMS訊息並且解析訊息內容來了解伺服器的意圖,並獲取其顯示內容進行處理。
  • 優點:可實現完全的實時操作
  • 缺點:成本相對較高。因為目前來說,很難找到免費的短訊息傳送閘道器來實現這種方案,只能通過向運營商繳納相應的簡訊費用

4.4 MQTT協議

  • 定義:輕量級的訊息釋出/訂閱協議
  • 原理:基於Push方式,wmqtt.jar 是IBM提供的MQTT協議的實現,原理如下圖:

史上最全解析Android訊息推送解決方案
MQTT協議原理

更多關於MQTT協議:

  1. 專案例項源
  2. 一個採用PHP書寫的伺服器端
  3. Jar包下載地址,並加入自己的Android應用程式中。
  4. 擴充:RSMB是從MQTT協議引申出來的另外一種解決方案:簡單的MQTT代理,詳情請點選

4.5 XMPP協議

  • 定義:Extensible Messageing and Presence Protocol,可擴充套件訊息與存在協議,是基於可擴充套件標記語言(XML)的協議,是目前主流的四種IM協議之一

    其他三種:

    • 即時資訊和空間協議(IMPP)
    • 空間和即時資訊協議(PRIM)
    • 即時通訊和空間平衡擴充的程式開始協議SIP(SIMPLE)
  • 原理:XMPP中定義了三個角色,分別是客戶端、伺服器和閘道器
    客戶端

    1. 通過 TCP/IP與XMPP 伺服器連線,然後在之上傳輸與即時通訊相關的指令(XML);
    2. 解析組織好的 XML 資訊包;
    3. 理解訊息資料型別。
      • XMPP的核心:XML流傳輸協議(在網路上分片斷髮送XML的流協議),也是即時通訊指令的傳遞基礎,即XMPP用TCP傳的是XML流
      1. 與即時通訊相關的指令,在以前要麼用2進位制的形式傳送(比如QQ),要麼用純文字指令加空格加引數加換行符的方式傳送(比如MSN)。
      2. XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文字。

    伺服器

    1. 監聽客戶端連線,並直接與客戶端應用程式通訊(客戶端資訊記錄)
    2. 與其他 XMPP 伺服器通訊;

    閘道器:與異構即時通訊系統進行通訊

    異構系統包括SMS(簡訊),MSN,ICQ等

通訊能夠在這三者的任意兩個之間雙向發生。

原理流程

史上最全解析Android訊息推送解決方案
原理流程

  • 優點:

    1. 開源:可通過修改其原始碼來適應我們的應用程式。
    2. 簡單:XML易於解析和閱讀;將複雜性從客戶端轉移到了伺服器端
    3. 可擴充性強:繼承了在XML環境中靈活的發展性,可進一步對協議進行擴充套件,實現更為完善的功能。

      GTalk、QQ、IM等都用這個協議

  • 缺點:如果將訊息從伺服器上推送出去,則不管訊息是否成功到達客戶端手機上。

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

更多關於XMPP協議更加詳細請點選

4.6 使用第三方平臺

現今主流的推送平臺分為

  1. 手機廠商類:小米推送、華為推送。
  2. 第三方平臺類:友盟推送、極光推送、雲巴(基於MQTT)
  3. BAT大廠的平臺推送:阿里雲移動推送、騰訊信鴿推送、百度雲推送

具體各推送平臺的優缺點請看我寫的文章:Android推送:第三方訊息推送平臺詳細解析

4.7 自己搭建

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

5. 總結


請點贊!因為你的鼓勵是我寫作的最大動力!

相關文章