最近有小朋友问我:“缺姐姐,缺姐姐,为什么我从苹果手机换成安卓手机后收到消息经常延迟,甚至收不到呢?太误事了。”
其实这是ios系统和Android系统推送机制不同导致的,那我就简单讲讲二者的不同吧。
iOS的推送(APNs,即Apple Psuh Notification Service),是通过苹果自己的APNs服务进行的,苹果的每一台iPhone设备都有一个对应特定APP的唯一的设备标示: deviceToken,拿到这个deviceToken后我们将这个deviceToken发给我们自己的服务器,当有消息需要被推送时,我们自己的服务器会将消息按指定的格式结合设备的deviceToken一并打包 然后发给APNs服务器,APNs将新消息推送给我们的设备上,然后就在设备的屏幕上显示出来了。
![ba082ddb8f39b5a254b0f2814aa4f360.png](https://i-blog.csdnimg.cn/blog_migrate/28a9173225e2de2b912848800d1b67c2.jpeg)
举个简单的例子:微博的服务器会给苹果公司对应的服务器发出通知,然后苹果服务器将要推送的内容下发到你的手机APP里,然后你打开就能看到推送的消息了。通知统一走苹果通道,所以管理很方便。
![107cc41a4ce41147baee177738f9bf25.png](https://i-blog.csdnimg.cn/blog_migrate/d8ff4ddf1e99d8bd7f5273cc5b44546b.jpeg)
Android系统推送机制跟iOS完全相反,iOS是统一由系统下发,而安卓每个需要后台推送的应用有各自的单独后台进程,才能和各自的服务器通讯,交换数据。虽然Android 也有类似 APNS 的 GCM(Google Cloud Message),属于开发者可选,非强制,但是Android的GCM在国内基本上是不可用的。为什么呢?一是国内大部分Android手机都不带Google服务,也就用不了GCM,这是主要的问题;二是在国内Google的服务一般都不太稳定,原因你懂的。
![8da16036577e9c802db53574c59cd966.png](https://i-blog.csdnimg.cn/blog_migrate/b650a870a47d66b6a9527760331ad9dd.jpeg)
所以现在在做消息推送的时候Android平台采用服务器与设备直接拉一条长连接的方式实现功能。但是如果自己搭建服务器的话那无论是稳定性还是速度上效果都会很差,因此安卓大多会集成第三方服务厂商的推送。但是即使如此,每一个应用都单独设置一个常驻进程收发消息,那也真的是徒增功耗,耗电会异常严重。
![ced3e77ba1bb0a93ab8b0e49c9381b23.png](https://i-blog.csdnimg.cn/blog_migrate/2df50f6222bcfb74f00f8e81097577ed.jpeg)
前几年万众瞩目的统一推送联盟到现在还没动静,其实就是根本没有多少APP适配,APP巨头腾讯系和阿里系也不会去带头,其中的利益错综复杂,这里就不展开了,除非工信部强势介入,当然这个可能性嘛。。。在国内想及时收到推送消息还是备上一款iPhone吧。
![675e494de24213cc77bb6d69253487fa.png](https://i-blog.csdnimg.cn/blog_migrate/902e8490ddbfc4e4385359a7f06b7f95.jpeg)