Как отменить локальный триггер уведомлений в Swift

У меня есть триггер для отображения уведомления пользователю:

let content = UNMutableNotificationContent()
content.title = "Title"
content.body = "Body"
content.sound = UNNotificationSound.default

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 20, repeats: false)

let request = UNNotificationRequest(identifier: "TestIdentifier", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

Есть ли способ отменить этот триггер после его установки?

Как отменить уведомление до того, как timeInterval истечет, и вызвать уведомление?


person Chief Madog    schedule 24.03.2019    source источник
comment
Что вы имели в виду, спрашивая это? Система считает только активные уведомления.   -  person Mannopson    schedule 24.03.2019
comment
@Mannopson Я спрашиваю, скажем, я открыл триггер, чтобы показать локальное уведомление через 15 минут, но через 10 минут я хочу отменить этот триггер, чтобы не показывать уведомление, как мне это сделать?   -  person Chief Madog    schedule 24.03.2019
comment
Используйте removePendingNotificationsWithIdentifier. Вы можете отменить уведомления по данному идентификатору.   -  person Mannopson    schedule 24.03.2019
comment
@Mannopson, можешь написать это как ответ? я дам тебе правильный ответ   -  person Chief Madog    schedule 24.03.2019
comment
Возможный дубликат Удалить конкретное локальное уведомление   -  person Cœur    schedule 24.03.2019


Ответы (2)


Вы можете отменить или удалить уведомления, позвонив по телефону:

let center = UNUserNotificationCenter.current()

Удалить ожидающие уведомления с заданным идентификатором

center.removePendingNotificationRequests(withIdentifiers: [“givenIdentifier”])

И удалить доставленные уведомления с заданным идентификатором

center.removeDeliveredNotifications(withIdentifiers: [“givenIdentifier”])
person Mannopson    schedule 24.03.2019

Чтобы построить поверх ответа Маннопсона:

Это удаляет все ожидающие уведомления (Swift 5).

func cancelNotifications() -> Void {
    UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
}
person garytechy    schedule 05.05.2020