当应用程序在后台时处理本地推送通知

时间:2017-05-15 22:18:34

标签: ios swift push-notification apple-push-notifications

在iOS 10中,我看到有两个处理本地推送通知的功能:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)

当应用程序位于前台时发生推送通知时,会调用第一个。第二种情况发生在应用程序处于后台并且用户点击通知时发生推送通知时。

我的问题是,有没有办法在应用程序处于后台时处理本地推送通知而用户不必点击它?理想情况下,无论应用程序是在后台还是前台,我都希望所有推送通知都能触发CloudKit更新。这甚至可能吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我能想到的唯一方法是在您的应用中添加通知扩展。有两种类型:“通知服务扩展”和“通知内容扩展”。

两者最初都用于其他方面,但两者都可以适用于这种情况,因为它们都可以实现方法didReceive(_:withContentHandler:),如果应用程序在后台,则由扩展接收和对通知作出反应。

我建议使用“通知服务扩展”(它最初用于在显示之前更改通知的内容,但您可以不加修改),并实施didReceive(_:withContentHandler:)方法。只需使用相同的原始通知调用内容处理程序,并触发CloudKit更新。

以下是有关如何添加服务扩展程序的详细教程:https://code.tutsplus.com/tutorials/ios-10-notification-service-extensions--cms-27550

在“3.扩展代码”部分中,有一个如何实现该方法的示例,其注释为“// Edit properties of copy”,这正是我添加代码以触发CloudKit更新的地方,所以只要应用程序在后台显示通知,它就会立即执行。