安卓推送的那些事儿
FCM 是什么?
从 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 生态圈的各种乱象。
扩展阅读:
最近更新
留言互动