До недавнего времени (я полагаю, до выпуска iOS 12) удаление удаленных push-уведомлений из Центра уведомлений работало должным образом с использованием removeDeliveredNotifications
.
Внезапно, без изменения кода в расширении службы уведомлений, уведомления больше не удаляются.
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
self.content = request.content.mutableCopy() as? UNMutableNotificationContent
guard let content = content else {
contentHandler(request.content)
return
}
UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
let matchingNotifications = notifications.filter({ $0.request.content.threadIdentifier == "myThread" && $0.request.content.categoryIdentifier == "myCategory" })
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: matchingNotifications.map({ $0.request.identifier }))
contentHandler(content)
}
}
Функция просто завершается без удаления уведомления. При отладке на реальном устройстве он показывает, что matchingNotifications
содержит уведомления и правильно указаны идентификаторы уведомлений, которые необходимо удалить.
Для тестирования вызов removeAllDeliveredNotifications()
работает и удаляет все уведомления.
Вышеупомянутая функция вызывается в override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)
В чем проблема?
didReceive
реализацию? Я считаю, что это связано с когда вы вызываетеcontentHandler
завершение. - person Kymer   schedule 26.01.2019contentHandler
выгружает / уничтожает ваше расширение (я полагаю), что может остановить асинхронное удаление. Можете ли вы попробовать отложить звонокcontentHandler
в целях тестирования? (задержка на пару секунд например) - person Kymer   schedule 26.01.2019