Отклонить UserNotificationsUI - UNNotificationContentExtensionResponseOption

Я устанавливаю несколько локальных уведомлений, и я установил количество действий для уведомления. как повесить, показать, закрыть.

    func didReceive(_ response: UNNotificationResponse, completionHandler completion:  @escaping (UNNotificationContentExtensionResponseOption) -> Void) {


    let id = response.notification.request.identifier

       if response.actionIdentifier == "SnoozeId" {
        completion(UNNotificationContentExtensionResponseOption.dismiss)

           }}

На didReceive - если действие дремлет - выполните дремоту, а затем я отклонил уведомление. поскольку я отклоняю все другие уведомления, ушли из центра уведомлений. Если у меня есть два уведомления A и B . Если я продолжаю давить и выполняю откладывание на А. И А, и В ушли из центра уведомлений. он должен уволить только А.

1 ответ

Вот результаты тестирования моего приложения.

Чтобы лучше ответить на ваш вопрос, предоставьте дополнительную информацию, такую ​​как - json уведомления и его userInfo (возможно, вы группируете уведомления и отклоняете все сразу?) И какая функция, которую вы вызываете, приводит к вызову didReceive (...).

Если вы позвоните

self.extensionContext?.dismissNotificationContentExtension()

затем закрывает расширение содержимого, но не закрывает его.

Если вы позвоните:

self.extensionContext?.performNotificationDefaultAction()

затем он завершает действие и отклоняет это единственное уведомление (не другие). Однако это открывает приложение, и вы, возможно, не захотите этого делать.

У меня мой делегат настроен следующим образом:

func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {

    switch response.actionIdentifier {
    case UNNotificationDismissActionIdentifier:
        // Dismiss action stuff.
        completion(.dismiss)
        // To not dismiss
        // completion(.doNotDismiss)
    case UNNotificationDefaultActionIdentifier:
        // Default action stuff.
        // Let's say the user executed default action, we want to dismiss and forward the action.
        completion(.dismissAndForwardAction)
        break
    default:
        break
    }
}

Тиа может помочь вам, на это был ответ некоторое время назад. Только на него был дан ответ в задаче C. Ответ, который, я думаю, вы захотите посмотреть, хранит уведомления в изменяемом массиве и удаляет уведомления из массива, когда это необходимо.