我在这里和其他地方看到了几个线程,但似乎没有一个正在使用UserNotifications
iOS 10 的新框架
有一个在单例函数getDeliveredNotifications(completionHandler:)
上调用的实例方法UNUserNotificationCenter
current()
接收一系列传递的completionHandler:
通知,然后可以在块内使用removeDeliveredNotifications(withIdentifiers:)
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
// UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [String])
}
我的挑战是如何从所有已发送的通知中识别特定通知,然后将其删除?
这就是我现在正在做的,看看是否有一个远程通知,其中包含我从服务器发送的带有有效负载密钥的 id ID
。这不会删除有问题的通知,显然是因为第一个函数返回 nil 尽管通知在通知中心可见。
func isThereANotificationForID(_ ID: Int) -> UNNotification? {
var foundNotification: UNNotification?
UNUserNotificationCenter.current().getDeliveredNotifications {
DispatchQueue.main.async {
for notification in notifications {
if notification.request.content.userInfo["id"] as! Int == ID {
foundNotification = notification
}
}
}
}
return foundNotification
}
func removeNotification(_ notification: UNNotification) {
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [notification.request.identifier])
}
// Find the notification and remove it
if let deliveredNotification = isThereANotificationForID(ID) {
removeNotification(deliveredNotification)
}