>动机:- 我想存储应用程序在未处于后台模式或被终止模式时收到通知时存储的通知有效负载。
问题:- 当应用程序在终止模式下收到通知时,没有委托调用。请建议在这种情况下该怎么做。
当应用程序被终止或退出时,您无法这样做。但是,您可以检索已传递的通知,并在再次打开应用程序时处理它们。您可以使用以下过程获取通知。
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
for aNoitfication in notifications
{
let payload = aNoitfication.request.content.userInfo
//process the payload
}
DispatchQueue.main.sync { /* or .async {} */
// update UI
}
}
PS:仅在iOS 10或更高版本上可用
来自苹果文档(UNUserNotificaitonCenter
框架 iOS 10+(...
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("didReceive (response.notification.request.content.userInfo)")
}
仅当应用程序位于前台时,才会在委托上调用该方法。如果未实现该方法或未及时调用处理程序,则不会显示通知。应用程序可以选择将通知显示为声音、徽章、警报和/或通知列表。此决定应基于通知中的信息是否对用户可见。
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("willPresent: (notification.request.content.userInfo)")
completionHandler([.alert, .badge, .sound])
}
当用户通过打开应用程序、关闭通知或选择 UNNotificationAction 来响应通知时,将在委托上调用该方法。必须在应用程序从 application:didFinishLaunchingWithOptions: 返回之前设置委托。