1. 程式人生 > >Android App訊息推送 實現原理

Android App訊息推送 實現原理

1.訊息推送的實質

實際上,是當伺服器有新訊息需推送給使用者時,先發送給應用App,應用App再發送給使用者


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

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

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

3.原理

4.7 種主流的訊息推送方式

1.C2DM

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


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

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

2.輪詢

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

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

4.3 SMS信令推送

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

缺點 成本高(主要是簡訊資費的支出)

4.4 MQTT協議

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


4 .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專案地址,大家有興趣可以去看看

4.6 使用第三方平臺
現今主流的推送平臺分為


手機廠商類:小米推送、華為推送。
第三方平臺類:友盟推送、極光推送、雲巴(基於MQTT)
BAT大廠的平臺推送:阿里雲移動推送、騰訊信鴿推送、百度雲推送
具體各推送平臺的優缺點請看我寫的文章:Android推送:第三方訊息推送平臺詳細解析


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



相關推薦

Android App訊息 實現原理

1.訊息推送的實質實際上,是當伺服器有新訊息需推送給使用者時,先發送給應用App,應用App再發送給使用者2. 作用產品角度:功能需要,如:資訊類產品的新聞推送、工具類產品的公告推送等等運營角度:活動運營需要,如:電商類產品的促銷活動;召回使用者 / 提高活躍度等等作為開發者

IOS8開發之實現App訊息

第一部分 首先第一步當然是介紹一下蘋果的推送機制(APNS)咯(ps:其實每一篇教程都有),先來看一張蘋果官方對其推送做出解釋的概要圖。 Provider是給你手機應用發出推送訊息的伺服器,而APNS(Apple Push Notification Service)則是蘋果訊息推送伺服器。你本地的

iOS經典講解之實現App訊息功能(二)

作者:Loving_iOS 上一篇部落格iOS經典講解之實現App訊息推送功能(一)講解了實現訊息推送的的準備工作,接下來我們來講解第二部分的內容,實現具體的推送及程式碼示例。 訊息推送的第三方平臺有很多,這裡我們使用極光推送平臺,註冊極光推送平臺的賬號。 登陸後進入控

APP訊息APP Push)解決方案-服務端工作邏輯和實現

一、APP 推送概述: App推送訊息是我們常見的一種app訊息提醒方式。 我們的實現需要第三方的支援,實現方式是後臺通過介面將Push請求傳送至第三方,第三方實現在App所在裝置上的推送。 二、APP推送後臺處理邏輯: 在與推送平臺互動時,後臺需要向第三方傳送兩部分資訊

如何構建一套高可用的 APP 訊息平臺

轉載自  如何構建一套高可用的 APP 訊息推送平臺 訊息推送作為移動 APP 運營中的一項關鍵技術,已經被越來越廣泛的運用。本文追溯了推送技術的發展歷史,剖析了其核心原理,並對推送服務的關鍵技術進行深入剖析,圍繞訊息推送時產生的服務不穩定性,訊息丟失、延遲,接入複雜性,統計

國內APP訊息機制以及微信訊息延遲問題剖析

轉自:https://club.huawei.com/thread-15878044-1-1.html 一、前言隨著安卓手機以及QQ/微信/支付寶/滴滴出行/美圖外賣等一大批行動通訊/移動消費應用的日益普及,我們無時無刻不在享受著這些移動產品帶來的便利;但同時也會遇到一些困擾,比如QQ/微信/支

Android app 移動遇到的問題(多問題集合)

       關於移動推送這塊,我主要是應用了極光推送跟阿里的移動推送,阿里這塊遇到的問題就是配置檔案這塊, 問題1:碰到一個資源重複的問題,是出現在應用級的build.gradle上面的資源包引用重複, 問題2:遇到的難點就是:無法例項化接收器

php 接極光 普通訊息和標題內容訊息實現方法

一、如下兩種訊息樣式推送方法,這裡介紹第一種標題+內容樣式的訊息推送。 1.首先,下載極光PHP的SDK,引入到專案,基礎參考 https://docs.jiguang.cn/jpush/server/sdk/php_sdk/   這裡不詳細介紹了 2.在

Android MQTT 訊息demo

··· 不會轉換gif格式,截圖給你們看看吧,如果有好的免費的轉換工具可以留言推薦給我,在此衷心感謝 裡邊寫了好多註釋,應該都能看懂,這個在ssm專案中也可以使用但需要定製,去除android化的東西 ··· 1.介面 2.連線Mqtt 3.傳送和接收訊息(上邊

SpringCloud工作筆記062---APP訊息_個平臺API使用經驗

前言       移動Push推送是移動網際網路最基礎的需求之一,用於滿足移動互聯環境下訊息到達App客戶端。以轉轉(58趕集旗下真實個人的閒置交易平臺)為例,當買家下單後,我們通過移動Push推送訊息告訴賣家,當賣家已經發貨時,我們通過移動Push訊息告訴買家,讓買賣雙

Android 根據訊息內容跳轉至指定頁面(極光

首先認識一下安卓newIntent方法的使用:newIntent方法的使用在於如果activity已經開啟了,並設定了啟動模式為:  android:launchMode="singleTask"的時候,當再次使用intent來啟動這個activtiy的時候就會進入這個方法裡

App訊息

首先到個推官網註冊一個賬號,然後點選“個推訊息推送",把需要推送的app進行登記 注意:登記時的應用標識就是appid. 應用登記成功之後會得到APPID,APPSecret,APPkey,MasterSecret 接著就需要配置sdk了,把得到的數值填入相對

dcloud開發混合app-訊息push

一、這裡使用個推,先註冊個推賬號,申請一個應用。 二、在manifest.json中新增sdk配置和模組許可權配置 三、新增推送訊息事件監聽器 先看一下官方文件: void plus.push.addEventListener( event,

Android App切換主題的實現原理剖析

今天再給大家帶來一篇乾貨。 Android的主題換膚 ,可外掛化提供面板包,無需Activity的重啟直接實現無縫切換,可高仿網易雲音樂的主題換膚。 這個連結是本次的Demo打包出來的樣本SkinChangeDemo,可以去下載下來先試試效果,面板檔案需放到儲存卡的根目錄下。 關於Android的主

微信公眾號-訊息-實現固定模式下的私人訂製

開發微信已經將近4個月了,但是還是不會本地除錯,只能部署到伺服器上,通過打日誌,來看是否有錯,@ALL哪位同志,如果有好的方法,可以告訴我。 先簡要介紹一下微信公眾號,訊息推送的原理。 微信公眾號只是一個平臺,這個平臺的功能是一樣的,但是這個功能的內容卻可以由這個公眾號

學習使用Android極光訊息

下載SDK 配置 依照如下形式在清單檔案中新增程式碼,並把包名和Appkey換成自己的包名。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http

Android 基於Netty的訊息方案之概念和工作原理(二)

上一篇文章中我講述了關於訊息推送的方案以及一個基於Netty實現的一個簡單的Hello World,為了更好的理解Hello World中的程式碼,今天我來講解一下關於Netty中一些概念和工作原理的內容,如果你覺得本篇文章有些枯燥,請先去閱讀《Android 基於Netty的訊息推送方案之Hell

android 實現mqtt訊息,以及不停斷線重連的問題解決

前段時間專案用到mqtt的訊息推送,整理一下程式碼,程式碼的原型是網上找的,具體哪個地址已經忘記了。 程式碼的實現是新建了一個MyMqttService,全部功能都在裡面實現,包括連伺服器,斷線重連,訂閱訊息,處理訊息,釋出訊息等基本操作。 首先新增依賴: dependencies { &

基於Netty實現Android 訊息(即時通訊)的解決方案

根據Netty框架實現訊息推送(即時聊天)功能. Netty框架,TCP長連線,心跳,阻塞訊息佇列,執行緒池處理訊息傳送, 基於Google ProtoBuf自定義的訊息協議, TCP粘包/拆包.... 客戶端通過TCP連線到伺服器,並建立TCP長連線;當伺服器端收到新訊息後通過TCP連線推送給

Android開發-在Android應用裡整合友盟訊息SDK的實現(相容小米、華為、魅族機型離線

前 言 最近由於專案的功能需求的需要,需要在Android應用整合訊息推送的功能,而目前市面上的第三方訊息推送除了友盟推送外,還有極光推送、小米推送、個推以及信鴿(騰訊)推送等。當時本人對比各大第三方的訊息推送進行了測試,覺得友盟訊息推送整合簡單,推送訊息的