Android第三方推送分析


最近,公司的一个物联网项目Android端,由于要保证推送的到达率和稳定性,由于Google 的原生推送(C2DM,现在的 GCM)不能正常使用,故只能退而求其次采用了集成多方推送的方案。目前国内的主流的手机厂商主要有:华为,小米,OPPO, VIVO, 魅族等。华为,小米都有官方自己的推送服务,其他厂商尚未提供相关的推送通道。我们在华为手机上集成华为推送,小米手机上集成小米推送,其他厂商的手机采用极光推送。

推送消息能送达的关键

推送的技术原理:推送服务器与移动无线网络(客户端)保持长连接。

这其中的关键就是SDK 能否保活。具体地说,有以下两方面:
1.SDK 如果不能及时地发起心跳,运营商网络的长连接会被断开。
2.SDK 的任务如果被杀掉了,不能被拉起,消息就完全没有机会下发。
如果 SDK 端不能有效地保活,那么无论服务器端怎么优化,都不能保证消息及时地送达。
对 Android 手机厂商来说,这里有一个矛盾的问题。手机厂商都希望自己出产的手机能有尽量长的待机时间,但是 App 定时在后台启动、维持心跳的行为,会极大地影响手机待机时间。
因此,最近几年,手机厂商为了控制后台服务,持续地推出各种限制手段。比如之前的心跳对齐,也就是不允许 App 任意使用 RTC 后台唤醒手机。还有更严厉的手段,就是定时清理所有后台服务,并且不允许服务通过监听广播自动拉起。

合理的方案

因为推送服务的特点,它最应该以系统原生服务的形态存在。iOS 有 APNs,Android 有 C2DM(GCM)。可惜的是,Android 的 GCM 在国内早已不能被有效使用。考虑到推送服务的特点,我们自然而然就想到了通过厂商的推送通道来解决这个问题,就像在 iOS 上使用 APNs 一样。使用 App 内的消息通道发消息给 App,再通过厂商的推送通道唤醒 App,App 被打开后,接受消息通道的离线消息。

从目前的实践情况来看,这是解决后台进程被清理的最有效办法。

最近工信部组织牵头成立安卓统一推送联盟,希望能早日解决国内安卓统一推送的问题。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭