Silent Push Notification - 苹果推送消息激活后台运行

推送消息一般用于事件通知。在苹果后台以及XCode成功配置推送消息后,可以由后台(或者任何程序),和APNS(Apple Push Notification Server)通信后触发。常规的消息推送可以在(由APNS token)指定用户的屏幕顶端生成一则消息栏,并伴随消息音效。但是,推送消息也可以附着内容,并且让iOS执行一段App的后台代码。这类推送则需要额外的配置,对消息体也有特殊要求。

本文主要总结这些额外的配置项,和其中隐晦的回调。

  1. Project->Capabilities->Background Models->Remote notification 打勾。

  2. 在推送消息体里面必须包含"content-available"项并且设置值为"1"。
    满足以上两点后,推送消息则可以激活在挂起状态(suspension)的App,并让它进入后台状态(background)。说具体点,推送消息可以触发iOS激活App注册的回调函数。

下面解释"Silent Push Notification"的几种特殊情况

  1. 当App既注册了didReceiveRemoteNotification:fetchCompletionHandler:,也注册了didReceiveRemoteNotification:时,当消息发送到设备时,只有didReceiveRemoteNotification:fetchCompletionHandler:会被调用。

  2. 当App在前台运行时, 上述的两个回调也可以被调用,但是不会生成屏幕顶端的消息栏,也没有提示音。

  3. 即使以上的配置和条件都满足,如果App被杀死了(说直接点,被用户踢了,或者内存用多了被系统踢了),即,App在终止状态(killed),iOS不会调用上述回调函数的。

下面要解释关于用户点击(消息栏)的事件产生
a) App在终止状态: iOS只会调用DidFinishLaunchingWithOptions:
b) App在其他状态: iOS会调用上述回调。

注意, 和网上很多错误的文章不同的是, Background fetch 是不需要打勾的。

赞 (0) 评论 分享 ()