首页 > 代码库 > IOS和android操作系统推送的实现原理

IOS和android操作系统推送的实现原理

IOS使用的技术叫做:APNS(Apple Push Notification Service)

Android使用的官方技术叫做:GCM(Google Clouding Messaging)

但是Android的GCM是开发者自己选的也可以自己实现,但是IOS就必须要走他的APNS才可以。


APNS和GCM本质上都是在系统中存在一个基于TCP协议的一个长连接,一直保持与服务器的连接,

即使手机睡眠也会一直保持联系。

这样你可能会产生一个疑问:这样岂不是会很费电?

事实上不是这样的,TCP长连接有个心跳时间(这个名字很有意思嘛,就像人的心脏一样,我们会觉得

心脏一直跳啊跳不会衰老很快吗?但是医学研究表明:心脏的收缩与舒张的时间比在1:2左右,也就是说

心脏2/3的时间在消息呢!),原因与这个类似,在长连接中,客户端与服务器在传输数据的时候传输数据

没的说,但是在没有数据传送的时候,客户端会每隔一段时间给服务器一个消息来告诉服务器要一直保持

联系,在发送消息的时候耗电,其他时候就不会了。这样就大概解决了你的疑问。


TCP长连接的心跳时间,在国外可以很长比如30分钟,在国内则因为网络环境复杂一般10分钟。客户

端发起的心跳,会短暂地消耗手机电能,但在这个心跳间隔期间,则消耗电能是很少的。当在心跳期间服

务器端有推送信息过来时,客户端可以收到并做处理。

ISO在设计之初考虑到用户的体验是不允许应用后台运行的,有了这个限制,但是对于终端设备,应用又

是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用)。所以Apple公司就采用了

这个技术。所有应用,有必要(申请)并且被允许(用户可以改设置)的话,可以通过 APNs 中转到达

用户。



至于Android的GCM,原理与之类似,但是不同的是这个几乎是没人用的,尤其是在大陆这个墙内的环境下,

就直接被Pass掉了。一般来说,应用大多数直接借用 XMPP 规范里的一些成果。少量如微信有IM底子的,

自己开发协议。这些在实现原理上与APNs / GCM 没有本质的区别,但有一定的技术门槛。而大多数普遍应

用,要使用推送的话,则使用轮询的方式简单实现。当然现在有好多的第三方的推送平台,比如极光推送,

百度的云推送等等。这些都是一个服务可以多应用一起使用的,假如qq、微信等等应用都统一使用一个推

送平台,那么Android的推送将达到IOS一样的省电效果,咩哈哈。


题外话:如果你的手机是土豪苹果,只要空间足够,应用不用管他,多少都没事。至于Android,如果觉得手机卡顿,能少装应用就少装啊。











IOS和android操作系统推送的实现原理