远程消息推送处理场景有三种:分别是app尚未运行、app在前台运行以及app在后台运行,下面介绍相关流程及三种场景下处理步骤算法
首先是在注册远程消息推送,须要注意的是iOS8及之后的系统中注册方法有所改变(同时证书设置以及push权限也须要开启)。这一步的目的是,容许app接收远程消息推送。服务器
deviceToken至关于设备的一个标识,服务器根据这个标识来进行消息推送。网络
①当用户赞成app接收远程消息推送后,手机会向APNs发起一个请求去获取deviceToken;app
②APNs收到请求,根据其相应流程及算法发送对应的deviceToken给手机;ide
③手机再将deviceToken传递给app;ui
④app再将deviceToken发送到后台服务器进行保存。spa
后台服务器之后就是根据deviceToken发送推送消息给APNs,APNs再根据deviceToken将消息推送到对应设备,设备再唤起app,显示推送而来的消息。3d
远程推送消息发送过来时,点开消息经常会有一些针对性处理或流程,最多见的就是跳转页面等,这里再也不展开,下面将介绍不一样场景下接收到推送后的处理步骤。blog
会调用“didReceiveRemoteNotification”方法,推送的数据在userInfo里,针对处理便可。it
屏幕上会出现通知提醒,若是点开消息进入app,app运行到前台时会调用“didReceiveRemoteNotification”方法,这也就是以前为何要区分一下applicationState的缘由,由于两者都是经过这一步来处理。
一样屏幕上出现通知提醒,点开消息进入app,启动时“didFinishLaunchingWithOptions”方法里的launchOptions对应UIApplicationLaunchOptionsRemoteNotificationKey部份内容再也不为空,含有的便是推送内容,针对处理便可。
若是手机不在网的时候,APNs会有一个QoS的东西把消息保存很短的时间,等手机在网时再推送过来,固然离线时间久了,消息也就收不到了,但在实际中发现貌似网络不佳的时候通常就收不到了。
若是手机离线时,服务器推送了多条消息,即时上线了收到消息,也只会收到最新的一条
推送的内容都有固定格式和长度,包括title(iOS8.2后增长的)、body、sound等,若是本地没有设置对应的声音文件,sound的值为default,收到推送的时候响起的是默认的提示音,而且推送消息的长度限制为256个字节(iOS8中这一限制放大到2kb),具体参考Local and Remote Notification Programming Guide中The Notification Payload这一节。