Я видел несколько тем по этому поводу здесь и в других местах, но, похоже, ни одна из них не использует новую структуру UserNotifications
для iOS 10.
Существует метод экземпляра getDeliveredNotifications(completionHandler:)
, который вызывается в UNUserNotificationCenter
одноэлементной функции current()
completionHandler:
принимает массив доставленных уведомлений, которые затем можно удалить внутри блока с помощью removeDeliveredNotifications(withIdentifiers:)
.
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
// UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [String])
}
Моя проблема заключается в том, как определить конкретное уведомление из всех доставленных уведомлений, а затем удалить его?
Это то, что я делаю прямо сейчас, чтобы увидеть, доставлено ли удаленное уведомление с идентификатором, который я отправил с сервера с ключом полезной нагрузки 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)
}