Категории IOS getnotificationкатегории, когда кнопка «Нажать действие» пуста

#ios #swift #push-notification #notificationcenter

Вопрос:

Когда я нажимаю на кнопку «Нажать действие», userNotificationCenter вызывается, тогда я пытаюсь найти равенство между response ( UNNotificationResponse ) и center.getNotificationCategories , но получаю пустой набор категорий.

Поток того, что я сделал:

  1. Настройте действие «Все категории», когда приложение открыто
       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)
     }
     
  2. отправьте push с помощью API firebase, нажмите успешно с помощью кнопок.
  3. Когда я нажимаю одну из кнопок, я пытаюсь получить все категории уведомлений, которые я настроил на шаге 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
                    }
  }
}