消息推送技術

1.推送技術的介紹:

傳統互聯網上數據交互通常有poll和push兩種方式。poll典型使用場景是瀏覽網頁,是用戶主動發起請求,向服務器獲取數據;push恰好相反,經過服務器直接發送數據給客戶端,用戶被動接受消息,相似於更加及時的短信。html

PUSH是互聯網上內容提供者和內容定製方之間的一種通訊機制,利用在服務器端的程序把數據源源不斷地推向客戶端,大大提升客戶機和服務器之間的交互性能。服務器

第三方推送服務供應商:極光、雲吧、個推、百度、蝴蝶等網絡

推送的意義:經過個推的技術,APP可主動向其用戶推送各種消息,結合精準的用戶畫像分析,給合適的用戶在合適的場景下推送合適的內容,大幅度提高消息點擊率、用戶活躍度和留存率。less

如:ide

智能家居:使用智能音箱播放歌曲,通過第三方推送服務器而後發到客戶端的APP上,讓你實時的知道播放了哪些歌曲。性能

遊戲娛樂類:玩家實時互動(有新活動、作新任務、領新裝備), 用戶隨時觸達, 喚醒沉默用戶, 提升ARPU值spa

社交媒體類:好友私信、熱點資訊第一時間送達,不讓用戶錯過任何有價值的消息、如你下載了新浪微博,有人@你或者私信你,那麼不用打開APP(可能後臺已經將應用給Kill掉了或者直接沒有打開)就能夠看到消息通知。設計

應用第三方推送服務的優點:htm

1.服務器主動鏈接客戶端,消息毫秒級下發,推送形式多樣。
2.爲不一樣屬性用戶打上智能標籤,實現精準推送和精細化運營。
3.冷熱溫數據引擎,結合地理圍欄技術精準識別用戶當下場景。

典型的使用第三方推送的應用:blog

2.不一樣終端的推送原理

iOS 系統的推送:APNS即 Apple Push Notification Service依託一個或幾個系統常駐進程運做,是全局的(接管全部應用的消息推送),因此可看做是獨立於應用以外,並且是設備和蘋果服務器之間的通信,而非應用的提供商服務器。你的例子裏面,騰訊 QQ 的服務器(Provider)會給蘋果公司對應的服務器(APNS)發出通知,而後再中轉傳送到你的設備(Devices)之上。當你接收到通知,打開應用,纔開始從騰訊服務器接收數據,跟你以前看到通知裏內容同樣,但倒是經由兩個不一樣的通道而來。
Android系統推送:它像是傳統桌面電腦系統作法。每一個須要後臺推送的應用有各自的單獨後臺進程,才能和各自的服務器通信,交換數據。另外其實 Android 也有相似 APNS 的 GCM(Google Cloud Message),屬於開發者可選,非強制。
因此你大概看出來區別,iOS 的消息推送機制面世之時是一種全新的解決方案(堪稱平臺中的平臺),應用自己不能有常駐的後臺進程,系統的開銷少,內存使用更少,電量也更少(把更多的運算和資源開銷放在雲端,非設備端)。而 Android 的特色,雖然開銷大,優勢是更穩定快速,但不明顯。
 

3.第三方推送的技術原理:

由於手機平臺自己、電量、網絡流量的限制,移動互聯網應用在設計上跟傳統 PC 上的應用很大不同,須要根據手機自己的特色,儘可能的節省電量和流量,同時又要儘量的保證數據能及時到達客戶端。
爲了解決數據同步的問題,在手機平臺上,經常使用的方法有2種。一種是定時去服務器上查詢數據,也叫Polling。
還有一種手機跟服務器之間維護一個 TCP 長鏈接,當服務器有數據時,實時推送到客戶端,也就是咱們說的 Push。
從耗費的電量、流量和數據送達的及時性來講,Push 都會有明顯的優點,但 Push 的實現和維護成本相對較高。在移動無線網絡下維護長鏈接,相對也有一些技術上的難度。 極光推送在 Android 平臺上是如何維護長鏈接。
本質上,APNs 與 GCM 是相似的技術實現原理:即系統層有一個常駐的 TCP 長鏈接,一直保持的長鏈接,即便手機休眠的時候也在保持的長鏈接。答案是:不會。這是手機的設計來作到的。TCP長鏈接有個心跳的時間,在國外能夠很長好比30分鐘,在國內則由於網絡環境複雜通常10分鐘。客戶端發起的心跳,會短暫地消耗手機電能,但在這個心跳間隔期間,則消耗電能是不多的。當在心跳期間服務器端有推送信息過來時,客戶端能夠收到並作處理。
 
推送系統的各個組成要素

首先咱們來看一下組成一個推送系統的幾個要素

推送系統SDK:以jar的方式出現,集成於第三方客戶端,解析第三方下行的數據,並把結果透傳給第三方客戶端;也能夠上行第三方定製的客戶端信息。

推送系統服務器:一側負責維護與成千上萬的SDK的長時鏈接,另外一側與第三方服務器對接,將第三方定製數據下行推送至個推SDK。

第三方服務器:數據推送的發起者,經過對接個推服務器,將數據發送至第三方客戶端。

第三方客戶端:第三方集成SDK的客戶端,推送數據正真的接收者和展示者。

說明:

AppID:應用ID,第三方在個推系統註冊賬號並建立生成的惟一的應用標識。

ClientID:用於標識客戶端身份,由第三方客戶端獲取並保存到第三方服務端。

UID:通常爲第三方系統賬號體系中的用戶標識。第三方服務端通常須要保存UID和ClientID的映射關係,進行消息推送時,經過UID查找到相應的ClientID,即可進行定向推送了。

 

參考資料:

     http://blog.jiguang.cn/jpush_wireless_push_principle/

     http://www.cnblogs.com/evakang/p/3756489.html

     https://www.zhihu.com/question/20667886/answer/15794992

相關文章
相關標籤/搜索