UNUserNotificationCenter removeDeliveredNotificationRequests не удаляет уведомления при создании с помощью UNCalendarNotificationTrigger
Я использую более новые API уведомлений, представленные в iOS 10 и работающие в Swift. Когда я создаю локальное уведомление, оно отображается правильно, но я пытаюсь удалить его в своем приложении, когда происходит соответствующее действие (чтобы пользователю не пришлось удалять его вручную). Но доставленное уведомление, кажется, сохраняется.
Я планирую локальное уведомление, как это:
let fireDate = Date() // some date, inputted as a method parameter
let calendar = Calendar.current
let dateComponents = calendar.dateComponents([.day, .month, .year, .hour, .minute], from: fireDate)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
let notificationContent = UNMutableNotificationContent()
notificationContent.title = "some title"
notificationContent.body = " some message"
notificationContent.userInfo["custom key"] = "my custom key"
notificationContent.badge = 1
var components = DateComponents()
components.day = 10
notificationContent.userInfo["endDate"] = calendar.date(byAdding: components, to: fireDate) // haven't verified if this even works, but saw this as a way to set notifications to expire automatically, including for completeness
let request = UNNotificationRequest(identifier: identifier, content: notificationContent, trigger: trigger)
UNUserNotificationCenter.current().add(request) { (error) in
if let error = error {
print(error)
}
}
Когда в моем приложении происходит такое действие, что уведомление перестает быть актуальным, я хочу удалить его из центра уведомлений или запретить его запуск, если оно еще не выполнено:
func clearNotification(withIdentifier: String) {
let identifiers = [identifier]
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers)
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: identifiers)
UIApplication.shared.applicationIconBadgeNumber = UIApplication.shared.applicationIconBadgeNumber - 1
}
Я проверил, чтобы убедиться, что идентификатор совпадает правильно. Если уведомление еще не сработало, это не так. Но если уведомление сработало, оно, похоже, останется в центре уведомлений на неопределенный срок. Значок приложения, кажется, работает, как ожидалось, но я не совсем понимаю, что removeDeliveredNotifications
предназначен для удаления уведомлений из центра уведомлений.
Примечание: я протестировал его на симуляторе, а также на реальном iPhone (iOS 11.2.6).
Похоже, что это конкретно связано с UNCalendarNotificationTrigger
потому что если я переключусь на использование UNTimeIntervalNotificationTrigger
кажется, все работает просто отлично. Уведомление, основанное на триггере временного интервала, исчезает, когда я звоню removeAllDeliveredNotifications
и это проявляется в getDeliveredNotifications
, Я не могу понять почему UNCalendarNotificationTrigger
будет вести себя по-другому (я читал в документации, что триггеры на основе местоположения немного отличаются, но не триггеры календаря). Я подозреваю, что это ошибка в iOS.
Изменить: не дубликат этого другого вопроса, так как этот вопрос вообще не обсуждает эту проблему. Можно считать дубликатом этого, но у этого нет никаких ответов.