最近まで (iOS 12 リリースより前だと思います)、通知センターからのリモート プッシュ通知の削除は、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
と、通知が含まれていることが示され、削除する通知 ID が正しく提供されます。
テストでは、呼び出しがremoveAllDeliveredNotifications()
機能し、すべての通知が削除されます。
上記の関数はoverride func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)
ここで何が問題なのですか?