基本上,我只是尝试打印我的应用已发送的通知,但执行以下操作:
UNUserNotificationCenter.current().getDeliveredNotifications { (notifications) in
print(notifications)
}
只是在Xcode控制台中显示一个空数组,即使通知中心包含多个已发送的通知。 (print(notifications.count)
返回0)
我可以使用getPendingNotificationRequests
成功抓取已安排但尚未投放的通知,更新通知,甚至使用removePendingNotificationRequests(withIdentifiers:)
删除通知。但任何访问/修改/删除任何已交付的东西的尝试都不起作用。
我在这里错过了一些简单的东西吗? iOS 10+访问交付的通知的方式最近有什么变化吗?
答案 0 :(得分:4)
我确实遇到了与getDeliveredNotification
相同的问题,通知数组始终为空。
所以,我意识到我将[UIApplication sharedApplication].applicationBadgeNumber
设置为0
,清除了来自通知中心的所有远程通知。
现在,只有在收到所有待处理通知后,我才会将applicationBadgeNumber
设置为0
。
答案 1 :(得分:0)
当我在UNNotificationServiceExtension
上使用它时它是空的,事实证明我需要使用信号量,以防止扩展返回0个结果:
let semaphore = DispatchSemaphore(value: 0)
let center = UNUserNotificationCenter.current()
center.getDeliveredNotifications { notifications in
defer {
semaphore.signal()
}
let relatedNotificationIdentifiers = notifications.filter { notification in
notification.request.content.userInfo["callId"] as? String == callId
&& notification.request.identifier != request.identifier
}.map(\.request.identifier)
// This call is async
center.removeDeliveredNotifications(withIdentifiers: relatedNotificationIdentifiers)
// ...so this call needs to be done with a slight delay because otherwise
// it will be killed before it is done removing the notifications
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
contentHandler(bestAttemptContent)
}
}
semaphore.wait()
此外,最后还需要等待一些时间来执行removeDeliveredNotifications
,该请求在后台也是异步的。
apns-collapse-id
可以帮助减少传入的APNS消息。