安卓推送的那些事兒
來自專欄安卓果醬4 人贊了文章
原文發佈於「安卓果醬」:安卓推送的那些事兒
從 iOS 說起
在 iOS 上,Apple 推送通知服務(Apple Push Notification Service)託管了所有應用的消息推送,也就是說當某一個應用的開發者(伺服器)需要發送一則消息通知時,這一則消息會首先發給 Apple 伺服器,然後經由 Apple 推送通知服務被推送到設備。這也解釋了我們在國內也能收到 Instagram、YouTube 等國外應用消息推送的原因了。
採用這樣的統一推送服務,應用就無需常駐後台,因此資源佔用便能很好地得到控制,有利於系統的流暢和續航。
Android 官方推送服務
在 Apple 推送通知服務發布後不久,Android 2.2 上也推出了統一的推送服務——「雲端至設備消息傳遞(Cloud to Device Messaging,即 C2DM)」,它的原理與 Apple 推送通知服務類似,消息從應用伺服器被發送到統一伺服器,然後再發送到設備。
之後 C2DM 被「Google 雲消息傳遞(Google Cloud Messaging,即 GCM)」替代。相比 C2DM,GCM 的主要優點是沒有消息配額限制,且對於開發者更友好,同時也能更好地節省電量。
2014 年 Google 收購 Firebase 後,將 GCM 改名為「Firebase 雲消息傳遞(Firebase Cloud Messaging,即 FCM) 」,它繼承了 GCM 的核心基礎架構,並帶有新的 SDK,簡化了雲消息傳遞的開發工作。
Firebase 原本是一家實時後端資料庫的創業公司,主要用於幫開發者快速的寫出 Web 端和移動端的應用,類似於國內 Bmob 這種後端雲服務,讓前端或者客戶端開發者,一行服務端代碼都不用寫,只需要簡單的配置,就可以快速的開發出一款應用來。
但是……
由於 Google 服務在大陸地區的連通性問題,國行 Android 手機往往會為了更好的用戶體驗而精簡掉 Google 服務,統一推送服務也同時被去除。由此,各大第三方推送服務應運而生。
比如華為的「華為推送平台」,小米的「MiPush」等。這些推送服務被集成在廠商深度定製的 Android 系統中(例如 MIUI 等),它們享有著系統級地位,推送的優先順序較高。所以,理論上講,如果你是小米手機用戶,MIUI 內的所有應用如果都使用 MiPush,系統應該是相對流暢省電的。
但是……
缺乏統一的推送服務介面,很多開發者很難兼顧所有的廠商,去為每一款手機都適配對應的推送服務。因此出現了各大互聯網公司自己的推送服務,比如百度雲推送、阿里雲移動推送。
也就出現了「百度全家桶」和「阿里全家桶」,調侃的就是它們自家應用的相互喚醒,讓系統變卡變慢——打開一個淘寶,就會喚醒閑魚、支付寶、天貓等等應用,這種相互喚醒,目的是讓共用的推送通道保持活躍,不被系統殺死,以便消息能及時送達。
甚至還出現了一些第三方平台提供推送服務,比如友盟推送等。這種第三方平台與 BAT 等互聯網公司的推送服務類似。因此,使用了同一推送通道的應用也會有相互喚醒的情況,以保持通道的活躍。
不同的開發者在面對以上眾多的推送服務時,必然會做出不同的選擇,這導致我們手機上的應用所使用的推送服務五花八門,極不統一。拋開多個推送服務本身所佔用的資源不說,應用之間為了保持推送通道的活躍而互相喚醒的情況常常使 Android 手機滿載運行,手機卡頓和費電也就不難理解了。
終於……
國內的「統一推送聯盟」
在工信部的牽頭下,國內「統一推送聯盟」成立。該聯盟將聯合多家 Android 手機廠商、互聯網公司等相關企業,打造一個 Android 平台的統一推送服務 Unified Push Service(UPS),有望遏制國內 Android 生態圈的各種亂象。
擴展閱讀:
- 關於 Google Play 服務和 FCM 的一些疑問
- 海外 App 的推送服務,試試 FCM 吧!
- 說說安卓 6.0 的 Doze 和 App Standby 功能
推薦閱讀:
※把那些流氓軟體都凍結起來,讓手機流暢又省電
※所謂的安卓aso優化技巧原來是這樣子的
※騷年你的屏幕適配方式該升級了!-SW 限定符適配方案