#ios #swift #push-notification #notificationcenter
Вопрос:
Когда я нажимаю на кнопку «Нажать действие», userNotificationCenter
вызывается, тогда я пытаюсь найти равенство между response ( UNNotificationResponse
) и center.getNotificationCategories
, но получаю пустой набор категорий.
Поток того, что я сделал:
- Настройте действие «Все категории», когда приложение открыто
func configActionButtonBackground(actions:[NotificationBackgroundActionModel]) { var categories:Set<UNNotificationCategory> = [] actions.forEach { action in if #available(iOS 11.0, *) { let identifier = action.identifier let positive = action.positive let negative = action.negative let positiveAction = UNNotificationAction( identifier: positive?.key ?? "", title: positive?.label ?? "", options: UNNotificationActionOptions(rawValue: 0)) let negativeAction = UNNotificationAction( identifier: negative?.key ?? "", title: negative?.label ?? "", options: UNNotificationActionOptions(rawValue: 0)) // Define the notification type let category = UNNotificationCategory(identifier: identifier ?? "", actions: [positiveAction, negativeAction], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: "", options: .customDismissAction) categories.insert(category) } } // Register the notification type. let notificationCenter = UNUserNotificationCenter.current() notificationCenter.setNotificationCategories(categories) }
- отправьте push с помощью API firebase, нажмите успешно с помощью кнопок.
- Когда я нажимаю одну из кнопок, я пытаюсь получить все категории уведомлений, которые я настроил на шаге 1
public func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo print("show click identiefier: (response.actionIdentifier)") center.getNotificationCategories { categories in let cat = categories.first { $0.identifier == response.notification.request.content.categoryIdentifier } if(cat != nil){ //active function completionHandler() return }
}
}
But instead getting all categories that i already configured, i am getting an empty set.
SOLVED
I really try to understand why i need to add delay maybe the app did not finish load all resource but it works!
DispatchQueue.main.asyncAfter(deadline: .now() 1) {
center.getNotificationCategories { categories in
DispatchQueue.main.async {
let cat = categories.first {
$0.identifier == response.notification.request.content.categoryIdentifier
}
if(cat != nil){
self.hanleClickAppTerminatedClickAction(response: response,withCompletionHandler: completionHandler)
return
}
}
}