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.

Изменить: не дубликат этого другого вопроса, так как этот вопрос вообще не обсуждает эту проблему. Можно считать дубликатом этого, но у этого нет никаких ответов.

0 ответов

Другие вопросы по тегам