看到很多人说苹果推送比安卓好太多,安卓关掉app就没法收到推送消息,作为从业者,来给大家科普下安卓和苹果的推送区别。

首先上苹果推送的整体流程图

简单描述一下,开发者先接入苹果推送服务,有消息需要推送时,在服务器上配置需要推送的内容,然后数据会通过ios提供的一条系统级推送通道(TCP长连接)将消息推送到手机,手机解析通知并展示。

android 推送内容 安卓的推送_推送消息

对于安卓来说,其实谷歌提供的GMS也是一样的逻辑,这里就不重复了。但因为谷歌在国内被墙了,所以国内安卓推送就比较复杂了。简单说下安卓推送的发展过程。

1.在安卓早期,系统限制较少,app开发者基本都是自己来维护一条推送通道。这样就导致了手机资源的极大浪费,对比ios,10个应用在ios只需要建立1条TCP长连接,而在安卓上就需要10条,而维持TCP长连接需要定时发送心跳包,而发送心跳包又需要唤醒手机,所以出现的结果就是:在安卓上,app为了及时收到消息而拼命保活,

TCP长链接维持需要经常唤醒,导致手机内存和电量的迅速消耗。

2. 为了优化前面所说的两个问题,随着安卓版本的演进,对于app的后台保活越来越严格,因此为了解决app被杀后无法收到消息的问题,大多数开发者开始接入第三方的推送sdk,比如友盟、个推、极光等。第三方的推送sdk可以实现推送通道共享。比如,应用a和b都集成了个推,a和b只需要使用1条TCP长链接就都可以收到推送消息。即使其中一个被杀了,也可以使用共享的通道展示通知消息。

3.随着安卓对后台管理的日益严格,且国内厂家为了提高手机性能和功耗,对后台应用采用白名单策略,不在白名单里的几乎不能在后台存留太久。即使共享通路,也不能完全满足推送消息的到达率要求。(因为可能共享的所有app都被杀了,这样通道就断了)。加之各大厂家都为了解决推送问题,提供了自家的推送服务,即系统提供一条系统级的推送通道,app可以通过此通道推送消息,客户端收到推送消息后展示通知,并不需要应用存活。其实此时逻辑和苹果推送服务已经完全一样了

,而个推友盟极光的sdk等也提供了使用

系统自带推送通道的开关,也就是说只要使用系统的推送服务,通知消息几乎是百分百到达。

总结一下,回答几个常见的问题。

1. 安卓的推送是不是不如苹果?

这个问题无悬念,因为苹果的强管控,所有推送必须走APNS,而安卓虽然有同样的功能,但不是每个应用都接入了推送服务。

2.安卓app挂了是不是就收不到消息了?

如前所述,此说法不正确,只有走自己推送通道的才会app挂了就没法收到消息,而使用系统通道的不会。大多数的应用都是用了系统的推送,不用的要么是用户太少,app不是国内的,因为使用系统推送对app本事也是有好处的,可以提高通知到达率;要么就是常年在厂家白名单里的,比如微信QQ这种,没哪个厂家会主动杀微信,微信也不愿意用厂家的推送通道,一直用的自己的。

3.安卓推送和苹果推送差距大么?

这个我只能说差距肯定有,但不是很大,主流应用推送都可以即使到达。如果对比较小众的app推送消息及时性有要求的,那就有差距了。

最后,补一个安卓发展趋势,工信部统筹的统一推送联盟估计这两年就要上线了,为的就是统一国内安卓推送的问题,而且统一推送联盟还利用了运营商的信令,即使没有数据连接也可以推送。安卓推送的到达率超过ios我觉得问题不大。

手机码字,还多包涵。