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