在iOS设备安装APP后,通常都会询问是否允许发送通知(下图),同意后,一般情况下用户都会收到某APP的push。比如,用户收到一条微博,他们喜欢的球队赢了比赛,或者他们的晚饭准备好了,既然APP不在运行,所以APP不能检查这些事件。 幸运的是Apple针对这些问题提供了解决方案。开发者可以写一个服务端的组建,替代客户端不停的检测或者在后台工作。
push 消息走的APNs服务器,设备和APNs(Apple Push Notification Service)服务器之间建立了一个安全通道。关于push的原理,如下图,详细看这里
把图片翻译一下就是:
1. 客户端向 APNs注册一下,并获取token
2. APN是将token传给客户端
3. 客户端将token发给自己的Server
4. 在合适的时候,自己的Server给APNs发送push消息。
5. 最终APNs发送给客户端
那么随着iOS版本的进化,Push交互和功能也在变化
iOS6 (待补充)
iOS7 支持后台push,静默push。设备不显示,也不响铃,点击了解更多
iOS8 支持push的更多交互(比如快速回复、删除单个push等)
开发人员的接口的变化
/* 下面几个是iOS6/7/8上的接口,统一在- (void)application:didReceiveRemoteNotification:中处理*/ - (void)application:didReceiveRemoteNotification://iOS6 - (void)application:didReceiveRemoteNotification:fetchCompletionHandler://iOS7,iOS8 - (void)application:handleActionWithIdentifier:forRemoteNotification:completionHandler://iOS8