中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

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

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

前言

  • 消息推送在Android開發(fā)中應(yīng)用的場(chǎng)景是越來越多了,比如說電商產(chǎn)品進(jìn)行活動(dòng)宣傳、資訊類產(chǎn)品進(jìn)行新聞推送等等,如下圖:

    推送消息截圖

  • 本文將介紹Android中實(shí)現(xiàn)消息推送的7種主流解決方案

目錄

目錄

1.定義

在用戶未打開App時(shí),App主動(dòng)向用戶推送服務(wù)器最新消息。如下圖:

消息推送的本質(zhì)是:App將服務(wù)器更新的信息推送給用戶

2.作用

  • 產(chǎn)品的角度:功能需要,比如說資訊類產(chǎn)品的新聞推送、工具類產(chǎn)品的公告推送等等
  • 運(yùn)營的角度:活動(dòng)運(yùn)營需要,比如說電商類產(chǎn)品的促銷活動(dòng);召回用戶 / 提高活躍度等等

作為開發(fā)者,不要有需求就接,應(yīng)該多思考、多理解用戶 / 功能的使用場(chǎng)景,有助于我們更好地去選擇合適的開發(fā)方式

3.儲(chǔ)備知識(shí)

3.1 操作系統(tǒng)有自身的消息推送功能(系統(tǒng)級(jí)別)

  • 系統(tǒng)級(jí)別:任何時(shí)候都可以推送給用戶,且不會(huì)被系統(tǒng)殺死
  • Android的消息推送服務(wù)稱為:C2DM(Cloudto Device Messaging)

    將在下面詳細(xì)描述

3.2 推送的本質(zhì)與原理

  • 消息推送的本質(zhì)是:App將服務(wù)器更新的信息推送給用戶,即App獲取服務(wù)器信息,再推送給用戶

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

    1. 主動(dòng)獲取方式(Pull)

      客戶端隔固定時(shí)間 主動(dòng) 向服務(wù)器獲取信息,看是否有更新的信息;若有更新信息,則發(fā)送到客戶端

    2. 被動(dòng)接受方式(Push)

      當(dāng)服務(wù)器有更新信息時(shí) 主動(dòng) 發(fā)送到客戶端

  • 對(duì)比:Push方式比Pull方式更優(yōu)越。因?yàn)椴捎肞ull方式時(shí)客戶端需要不停地去監(jiān)測(cè)服務(wù)器的變化,更費(fèi)客戶端的資源(CPU資源、網(wǎng)絡(luò)流量、系統(tǒng)電量)

4. 解決方案

經(jīng)總結(jié),Android中實(shí)現(xiàn)消息推送的有7種主流解決方案,接下來將一一介紹。

4.1 C2DM

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

    Android系統(tǒng)級(jí)別的消息推送服務(wù)-Google出品

  • 原理:基于Push方式,C2DM服務(wù)負(fù)責(zé)處理諸如消息排隊(duì)等事務(wù),并向運(yùn)行于目標(biāo)設(shè)備上的應(yīng)用程序分發(fā)這些消息。如下圖:

C2DM原理

  • 優(yōu)點(diǎn):C2DM提供了一個(gè)簡(jiǎn)單的、輕量級(jí)的機(jī)制,允許服務(wù)器可以通知移動(dòng)應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶數(shù)據(jù)。
  • 缺點(diǎn):
    1. 依賴于Google官方提供的C2DM服務(wù)器,但在國內(nèi)使用Google服務(wù)需要翻墻,成本較大;
    2. 需要用戶手機(jī)安裝Google服務(wù)。但由于Android機(jī)型、系統(tǒng)的碎片化 & 國內(nèi)環(huán)境,國內(nèi)的Android系統(tǒng)都自動(dòng)去除Google服務(wù),假如要使用C2DM服務(wù),這意味著用戶還得去安裝Google服務(wù),成本較大。

4.2 輪詢

  • 原理:基于Pull方式,應(yīng)用程序隔固定時(shí)間 主動(dòng) 與服務(wù)器進(jìn)行連接并查詢是否有新的消息
  • 缺點(diǎn):
    1. 成本大,需要自己實(shí)現(xiàn)與服務(wù)器之間的通信,例如消息排隊(duì)等;
    2. 到達(dá)率不確定,考慮輪詢的頻率:太低可能導(dǎo)致消息的延遲;太高,更費(fèi)客戶端的資源(CPU資源、網(wǎng)絡(luò)流量、系統(tǒng)電量)和服務(wù)器資源(網(wǎng)絡(luò)帶寬)

4.3 SMS

  • 定義:短信發(fā)送
  • 原理:基于Push方式,通過攔截SMS消息并且解析消息內(nèi)容來了解服務(wù)器的意圖,并獲取其顯示內(nèi)容進(jìn)行處理。
  • 優(yōu)點(diǎn):可實(shí)現(xiàn)完全的實(shí)時(shí)操作
  • 缺點(diǎn):成本相對(duì)較高。因?yàn)槟壳皝碚f,很難找到免費(fèi)的短消息發(fā)送網(wǎng)關(guān)來實(shí)現(xiàn)這種方案,只能通過向運(yùn)營商繳納相應(yīng)的短信費(fèi)用

4.4 MQTT協(xié)議

  • 定義:輕量級(jí)的消息發(fā)布/訂閱協(xié)議
  • 原理:基于Push方式,wmqtt.jar 是IBM提供的MQTT協(xié)議的實(shí)現(xiàn),原理如下圖:

MQTT協(xié)議原理

更多關(guān)于MQTT協(xié)議:

  1. 項(xiàng)目實(shí)例源
  2. 一個(gè)采用PHP書寫的服務(wù)器端
  3. Jar包下載地址 ,并加入自己的Android應(yīng)用程序中。
  4. 拓展:RSMB是從MQTT協(xié)議引申出來的另外一種解決方案:簡(jiǎn)單的MQTT代理

4.5 XMPP協(xié)議

  • 定義:Extensible Messageing and Presence Protocol,可擴(kuò)展消息與存在協(xié)議,是基于可擴(kuò)展標(biāo)記語言(XML)的協(xié)議,是目前主流的四種IM協(xié)議之一

    其他三種:

    • 即時(shí)信息和空間協(xié)議(IMPP)
    • 空間和即時(shí)信息協(xié)議(PRIM)
    • 即時(shí)通訊和空間平衡擴(kuò)充的進(jìn)程開始協(xié)議SIP(SIMPLE)
  • 原理:XMPP中定義了三個(gè)角色,分別是客戶端、服務(wù)器和網(wǎng)關(guān)

    客戶端

    1. 通過 TCP/IP與XMPP 服務(wù)器連接,然后在之上傳輸與即時(shí)通訊相關(guān)的指令(XML);
    2. 解析組織好的 XML 信息包;
    3. 理解消息數(shù)據(jù)類型。
      • XMPP的核心:XML流傳輸協(xié)議(在網(wǎng)絡(luò)上分片斷發(fā)送XML的流協(xié)議),也是即時(shí)通訊指令的傳遞基礎(chǔ),即XMPP用TCP傳的是XML流
      • 與即時(shí)通訊相關(guān)的指令,在以前要么用2進(jìn)制的形式發(fā)送(比如QQ),要么用純文本指令加空格加參數(shù)加換行符的方式發(fā)送(比如MSN)。
      • XMPP傳輸?shù)募磿r(shí)通訊指令的邏輯與以往相仿,只是協(xié)議的形式變成了XML格式的純文本。

    服務(wù)器

    1. 監(jiān)聽客戶端連接,并直接與客戶端應(yīng)用程序通信(客戶端信息記錄)
    2. 與其他 XMPP 服務(wù)器通信;

    網(wǎng)關(guān):與異構(gòu)即時(shí)通信系統(tǒng)進(jìn)行通信

    異構(gòu)系統(tǒng)包括SMS(短信),MSN,ICQ等

通信能夠在這三者的任意兩個(gè)之間雙向發(fā)生。

原理流程

原理流程

  • 優(yōu)點(diǎn):

    1. 開源:可通過修改其源代碼來適應(yīng)我們的應(yīng)用程序。
    2. 簡(jiǎn)單:XML易于解析和閱讀;將復(fù)雜性從客戶端轉(zhuǎn)移到了服務(wù)器端
    3. 可拓展性強(qiáng):繼承了在XML環(huán)境中靈活的發(fā)展性,可進(jìn)一步對(duì)協(xié)議進(jìn)行擴(kuò)展,實(shí)現(xiàn)更為完善的功能。

      GTalk、QQ、IM等都用這個(gè)協(xié)議

  • 缺點(diǎn):如果將消息從服務(wù)器上推送出去,則不管消息是否成功到達(dá)客戶端手機(jī)上。

  • 源碼實(shí)例:有一個(gè)很棒的基于XMPP協(xié)議的java開源Android push notification:Androidpn 項(xiàng)目地址 ,大家有興趣可以去看看

4.6 使用第三方平臺(tái)

現(xiàn)今主流的推送平臺(tái)分為

  1. 手機(jī)廠商類:小米推送、華為推送。
  2. 第三方平臺(tái)類:友盟推送、極光推送、云巴(基于MQTT)
  3. BAT大廠的平臺(tái)推送:阿里云移動(dòng)推送、騰訊信鴿推送、百度云推送

具體每種的推送平臺(tái)的優(yōu)缺點(diǎn)和分類請(qǐng)點(diǎn)擊:

4.7 自己搭建

如果你的產(chǎn)品對(duì)于消息推送具備較高的功能和性能要求,同時(shí)對(duì)安全性要求非常高的話,自己搭建可能是最好的方式,但這種方式無疑成本是最高的。

5. 總結(jié)

  • 經(jīng)過上面的詳細(xì)講解,相信大家現(xiàn)在對(duì)Android中消息推送的解決方案已經(jīng)非常了解
  • 解決方案沒有優(yōu)劣,要具具體使用場(chǎng)景而定。但一般來說, 個(gè)人建議使用第三方平臺(tái)推送,成本低+抵達(dá)率高
  • 接下來,我會(huì)繼續(xù)講解Android開發(fā)中關(guān)于消息推送的其他知識(shí)

 

來自:http://www.jianshu.com/p/b61a49e0279f

 

標(biāo)簽: Google 安全 代碼 電商 電商產(chǎn)品 服務(wù)器 服務(wù)器端 開發(fā)者 通信 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:Android手把手教你實(shí)現(xiàn)搜索框

下一篇:Java中的Filter過濾器詳解