Как удалить отображаемое представление UNNotificationContentExtension - PullRequest
1 голос
/ 11 июля 2020

Я использовал UNNotificationContentExtension для опроса пользователя.

введите описание изображения здесь

Условие: я не открываю родительское приложение.

Вот действие смайлика

    if #available(iOSApplicationExtension 12.0, *) {

        // API call here
        self.extensionContext?.dismissNotificationContentExtension()
    } else {
        // Fallback on earlier versions
    }

У каждого смайлика есть действия. Когда пользователь коснется смайлика, я отправлю ответ на сервер и удалю это уведомление. Все будет происходить с расширением.

В чем проблема?

Использование dismissNotificationContentExtension уведомления, чтобы закрыть и мгновенно скрыть. Его снова можно найти на экране уведомлений. Как я могу удалить это уведомление, когда пользователь нажимает кнопку эмодзи.

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Вот как работает мое решение. Минусы: все доставленные уведомления той же категории удаляются вместо удаления текущего сообщения.

@IBAction func btnActionHappy(_ sender: Any) {
    
       UNUserNotificationCenter.current().getDeliveredNotifications { notifications in
            if #available(iOSApplicationExtension 12.0, *) {
                self.extensionContext?.dismissNotificationContentExtension()
            } else {
                // Fallback on earlier versions
            }

            let matchingNotifications = notifications.filter({ $0.request.content.categoryIdentifier == "debitOverdraftNotification" })
            UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: matchingNotifications.map({ $0.request.identifier }))
            
            print("Somethings")

        }
}
1 голос
/ 11 июля 2020

Вы можете сделать это с помощью протокола UNUserNotificationCenter и UNNotificationContentExtension

Добавить действие с помощью UNUserNotificationCenter

let center = UNUserNotificationCenter.current()
center.delegate = self  
center.requestAuthorization (options: [.alert, .sound]) {(_, _) in 
}  
let clearAction = UNNotificationAction(identifier: "sadEmoji", title: "Emoji", options: [])
let category = UNNotificationCategory(identifier: "NotifCategory", actions: [clearAction], intentIdentifiers: [], options: [])
 center.setNotificationCategories([category])

Добавить метод делегата протокола UNNotificationContentExtension в контроллер представления вашего расширения

 func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
    if response.actionIdentifier == "sadEmoji" {
        UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: "NotifCategory")
    }
    completion(.dismiss)
}

Попробуйте и дайте мне знать, что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...