最近一个项目涉及消息推送,调试过程中,经常碰到用户收不到消息,原因是 APP 已不在运行了,为了解决这个问题,APP 开发集成了当前主流手机的推送功能,但这也不能彻底解决问题。
一、Apple 与 Android 的推送机制不同
Apple 可以说是得利于 iOS 的封闭,从架设服务器到消息审核一切皆由 Apple 自己完成。就是大家口中常说的“虚拟后台”,在应用关闭的情况下你依然能收到该 APP 的推送。其原理是基于 iOS 中有个系统级别的推送服务程序,使用了 5223 端口,被用于 IM( 即 Instant Messaging,即时通讯工具 )软件中。可以理解为苹果服务器在手机后台外挂了一个即时信息的推送收发器。简单来说,就是形成了一套以服务器直接推送信息到手机而不用启动 APP 的系统。Apple 直接掌控推送服务器更加快速可靠,且只有登陆过的开发者可以通过苹果的服务器进行推送,避免了无端的垃圾信息。同时无需后台 APP 常驻占用系统资源使手机更加省电。
而 Android 这边原本主要靠谷歌管理推送信息,但因退出中国大陆市场的原因,导致缺少依靠谷歌服务的应用,自家的云推送服务 GCM/FCM 也因生态环境的不同而难以使用。Android 的消息推送需要 APP 的开启才能进行,Android 的开放系统在不运行 APP 时则完全接收不到消息,为了做到数据的同步和精准推送,APP 需要时刻保持开启接收数据端,同时下载越多内存就会被越多的占用用来接收推送数据,所以会导致大多数人眼中的“ Android 越用越卡”这种现象。
而 APP 的开发者则不会多为其他考虑,一切的行为谐为 APP 保活,在需要推送时只需想方设法从后台唤醒推送即可,什么电池续航一切皆与我无关,越来越多的应用使用这种方式导致了用户手机的系统卡顿、耗电增加。
二、统一推送联盟
长期以来,安卓系统一直存在严重的碎片化问题,加之国内 APP 开发不规范,各种交叉唤醒、链式启动、消息推送非常混乱,大量消耗系统资源,导致手机出现耗电、卡顿等问题,影响用户体验。经过国家有关部门牵头,于 2017 年 10 月成立 统一推送联盟,联盟核心任务是:探索推送行业创新,促进终端生产厂商、应用开发厂商和第三方服务提供商等进行深入合作,整合行业资源,助推形成统一的推送体系,创造绿色环境,减少与终端用户的利益冲突,提升整体行业形象,降低整体行业的实现成本,形成自律基础上的产业链协同发展,实现产业的共同繁荣。
“安卓统一推送联盟”的正式成立标志着安卓手机 APP 自启和应用间相互唤醒的毛病将得到改善,国内 Android 生态的混乱状态将得到有效解决。未来,安卓手机推送消息时,不必唤醒手机应用,从而保证 APP 在未被使用时处于休眠状态,节省手机的内存和电量,安卓用户的体验将更加贴近 iOS(奇怪的是 iOS 现在也越来越像 Android 风格)。
三、各大推送平台的服务
国内厂商为了整治推送现象纷纷退出自家的 Push 服务,例如针对 MIUI 的小米 Push,针对 EMUI 的华为 Push 等。甚至是一些第三方例如 JPush、阿里 Push、百度云 Push 等第三方参与其中。但厂商仅针对自家环境的限制优化对开发者而言就是一个麻烦,因为没有统一的标准,且每加入一个 Push 服务就意味着开发工作的增加。
推送平台 | 通知栏 | 透传 | 限制情况 |
---|---|---|---|
华为推送 | 支持 | 支持 | 部分 EMUI 4.0 和 4.1的手机,以及 EMUI 5.0及之后的华为手机 |
小米推送 | 支持 | 支持 | 小米手机(MIUI 系统)才能在非启动状态收到推送,其他手机需要在前台或后台才能收到。 |
OPPO 推送 | 支持 | 不支持 | 仅支持部分 OPPO 手机系统(ColorOS) Android APP 应用 |
VIVO 推送 | 支持 | 不支持 | 只支持 VIVO 平台高版本部分的手机。 |
魅族推送 | 支持 | 支持 | 魅族手机 |
FCM | 支持 | 支持 | 安装了 Google Service 的手机才能收到推送,在国内无法正常收到推送。 |
建议
- 由于华为推送、OPPO 推送、VIVO 推送只支持部分的手机,并没有全面覆盖所有自家品牌手机,建议尽量使用自家的厂家推送,不支持的情况下就统一使用小米推送。
- 由于 OPPO 推送和 VIVO 推送无法收到透传,如果对透传功能有强要求,建议自己通过 netty 实现,但是需要较多的开发成本。小团队可以在全部平台都使用 小米推送 作为辅助推送,所有的透传推送都通过小米推送实现,通知栏推送走各大厂商推送。
- 由于 FCM 是需要依赖 Google Service 和网络环境,通常情况下不建议使用,如果有大量的国外的用户才建议使用。
- 选择推送平台尽可能选择厂家推送,服务端管理各大推送,但是工作量较多。建议尽可能不要选择商业推送,因为商业推送会有 APP 间相互唤醒,给用户一个非常不好的印象,而且纯粹的商业推送已经无法保证到达率了。当然商业推送也有他的优点,简化使用,而且有些商业推送已经支持厂家推送,可以保证到达率,但是通常需要付费才能使用。
- 由于部分厂家推送不支持别名推送,所以需要我们服务端对每个平台的 token 进行管理,全部通过 token 进行推送。
华为推送
Huawei PUSH(华为推送服务)是华为为开发者提供的消息推送平台,虽然华为推送也很早期也有,但是华为并不重视华为推送,所以比较难用,而且早期的手机到达率也是很有问题。由于统一推送联盟的成立,华为才开始重视起来。华为推送不支持别名推送,所以必须通过服务端管理token,这一点对开发者也非常不友好。
说明
- 部分 EMUI 4.0 和 4.1的手机,以及 EMUI 5.0 及之后的华为手机才能收到推送。
- 支持通知栏和透传两种方式。
- 不支持别名推送,必须通过服务端管理。
小米推送
小米消息推送服务在 MIUI 上为系统级通道,并且全平台通用,可以为开发者提供稳定、可靠、高效的推送服务。小米是国内最早开始做推送的手机厂家,所以基本所有的小米手机都可以在没有打开 APP 的情况下收到推送。
说明
- 在 MIUI 上系统级长连接,最大程度提高消息送达率。
- 支持两大系统的推送服务,iOS 开发者还可以将存量用户无缝迁移到小米推送中。
- 支持通知栏和透传两种方式。
- 支持所有品牌的手机。
OPPO 推送
OPPO PUSH 是 ColorOS 上的系统级通道,为开发者提供稳定,高效的消息推送服务。
说明
- 目前仅支持 OPPO 手机系统(ColorOS) Android APP 应用。
- OPPO 推送暂时只支持通知栏消息的推送。消息下发到 OS 系统模块并由系统通知模块展示,在用户点击通知前,不启动应用。整个过程环保省电。
VIVO 推送
Funtouch OS 系统级通道,提供稳定、可靠、高效的推送服务。
说明
- Funtouch OS 系统长连接服务,到达率高。
- 只支持 VIVO 平台高版本部分的手机。
- 为避免造成用户打扰,目前 vivo 手机接收的消息为 7:00-23:00,服务器允许推送时间为 7:00-22:00,单推不受此时间限制,在限制时间之外发送的群推或全推,会被抛弃。
- 目前是每个客户端每天可接收单推消息不受限制,群推消息和全推消息都属于公共类资讯,每个用户每天可以接收 5 条公共类消息;
魅族推送
魅族推送在 Flyme 系统上的长连接由系统维护,能够充分保障消息在 Flyme 系统上的到达率。魅族推送虽然是后期之秀,但是魅族对待推送的态度和小米是一样的好,是真正为了做好用户服务,魅族除了推出自家的推送以外,还推出了魅族集成推送服务 ,方便用户管理多家的推送平台。
说明
- 只支持 Flyme 系统的魅族手机,其他手机无法收到推送。
- 单个业务在平台或 API 进行推送有速率限制,默认应用是 500 条/秒,如果超过此速率可以联系我们进行调整;
- 单个业务每天在平台或 API 进行任务推送有次数限制,默认是 1000 条/天;
- 单个设备 1 个月内不活跃,将取消订阅;
- 支持通知栏和透传两种方式。
FCM 推送(Firebase Cloud Messaging)
FCM 是 Google 推出的新推送推送平台,是用来代替 GCM(Google Cloud Messaging),主要用于消息推送的,即使在应用没有起来的情况下,由于 FCM 需要 Google service 支持,在国内基本不能用。
说明
- 支持 iOS、Android 或网页 (JavaScript) 客户端应用。
- 在国内基本无法正常工作,只有较多海外用户才建议使用。
- 只有安装了 Google Service 的手机才能收到推送。
四、总结
所以统一推送联盟是市场和发展决定的产物,它的出现就是为了制定一个标准,整治乱推送、常驻后台、占用资源这种行业乱象。
用户收到的推送都会经过审核,且不会占用系统资源,同时避免了链式启动带来的后台隐患。
统一推送联盟最新进度,具体时间:
- 2019年3月1日,联盟开始统一推送标准符合性测试。
- 2019年12月31日,现有各推送渠道兼容统一推送标准。
而要达到现有个推送通道兼容统一推送标准,至少得到 2019 年 12 月 31 号了。
Refer