推送消息通常用于事件通知。在苹果后台以及XCode成功配置推送消息后,能够由后台(或者任何程序),和APNS(Apple Push Notification Server)通讯后触发。常规的消息推送能够在(由APNS token)指定用户的屏幕顶端生成一则消息栏,并伴随消息音效。可是,推送消息也能够附着内容,而且让iOS执行一段App的后台代码。这类推送则须要额外的配置,对消息体也有特殊要求。函数
本文主要总结这些额外的配置项,和其中隐晦的回调。fetch
Project->Capabilities->Background Models->Remote notification 打勾。code
在推送消息体里面必须包含"content-available"项而且设置值为"1"。
知足以上两点后,推送消息则能够激活在挂起状态(suspension)的App,并让它进入后台状态(background)。说具体点,推送消息能够触发iOS激活App注册的回调函数。token
下面解释"Silent Push Notification"的几种特殊状况事件
当App既注册了didReceiveRemoteNotification:fetchCompletionHandler:
,也注册了didReceiveRemoteNotification:
时,当消息发送到设备时,只有didReceiveRemoteNotification:fetchCompletionHandler:
会被调用。内存
当App在前台运行时, 上述的两个回调也能够被调用,可是不会生成屏幕顶端的消息栏,也没有提示音。回调函数
即便以上的配置和条件都知足,若是App被杀死了(说直接点,被用户踢了,或者内存用多了被系统踢了),即,App在终止状态(killed),iOS不会调用上述回调函数的。it
下面要解释关于用户点击(消息栏)的事件产生
a) App在终止状态: iOS只会调用DidFinishLaunchingWithOptions:
。
b) App在其余状态: iOS会调用上述回调。io
注意, 和网上不少错误的文章不一样的是, Background fetch 是不须要打勾的。后台