1、iOS 的推送是统一挂在苹果服务器上的,app安装的时候设备会把token分享给app,app的服务器根据这个token发消息给苹果,苹果根据token发给设备
设备和苹果的连接由系统挂在流量上的tcp长连接实现,装再多app也只需要挂这么一个连接就能保证推送,不像国产安卓app每个都要自己挂后台并且保持连接
其实安卓也是有系统级的推送服务的,这个服务因为由一个不存在的服务商提供,所以没法用,你说怪谁?
此外说到本地通知,iOS也有方案,app可以向系统请求注册本地通知,到时间了由系统自己发出来,也不需要app挂后台
2、苹果的消息机制通俗的来讲就是这样:
APP的厂商的消息发给苹果服务器,苹果服务器发给制定iOS设备
所以iOS也会为信息推送留进程,但是只有iOS里的一个系统进程,APP不用留,你收到的通知和APP没有半分钱关系,这就是为什么iOS版的微信和QQ每次进入都有一段时间要收取消息。
Android是这样:
从APP服务器直接发给APP,APP用申请的弹窗权限给你弹出来
所以每一个应用都得有个进程才能接收通知
为啥会这样呢?
其实Android也有一套系统级信息推送服务
然而服务器是Google的,后面不用我说了吧
3、Push的原理:
Push 的工作机制可以简单的概括为下图
图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider。
APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。
上图可以分为三个阶段。
第一阶段:Push服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。
从上图我们可以看到。
1、首先是应用程序注册消息推送。
2、 IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
3、应用程序将deviceToken发送给PUSH服务端程序。
4、 服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。