UserNotifications, объявление активных типов уведомлений - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь следовать этому документу , чтобы установить некоторые уведомления в моем приложении. Но он работает только частично.

Точнее, я получаю уведомление, как и ожидалось, но не получаю выбор ответов (Accept-Decline, в примере документа). Ниже мой код (соответствующие части), я использую выбор «Action-One» и «Action-Two» вместо «Accept» vs «Decline»; но в остальном я стараюсь следовать документу.

Создание уведомления:

let notification = UNMutableNotificationContent()
notification.title = notificationInfo.title
notification.body = notificationInfo.body
notification.sound = UNNotificationSound.default

if let data = notificationInfo.data {notification.userInfo = data}

// Define the custom actions.
let actionOne = UNNotificationAction(identifier: "ACTION_ONE",
                                     title: "Action-One",
                                     options: UNNotificationActionOptions(rawValue: 0))
let actionTwo = UNNotificationAction(identifier: "ACTION_TWO",
                                     title: "Action-Two",
                                     options: UNNotificationActionOptions(rawValue: 0))
// Define the notification type
let userReactionCategory =
      UNNotificationCategory(identifier: "USER_REACT",
                             actions: [actionOne, actionTwo],
                             intentIdentifiers: [],
                             hiddenPreviewsBodyPlaceholder: "",
                             options: .customDismissAction)
// Register the notification type.
let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.setNotificationCategories([userReactionCategory])

notification.categoryIdentifier = "USER_REACT"

return notification

userNotificationCenter: didReceive: withCompletionHandler функция:

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
           
    let traceRecord = TraceUnit(context: self.moc) // To leave some logs in a DB.
    
      // Perform the task associated with the action.
      switch response.actionIdentifier {
      case "ACTION_ONE":
         traceRecord.name = "ACTION_ONE"
         break
      case "ACTION_TWO":
         traceRecord.name = "ACTION_TWO"
         break
      // Handle other actions…
      default:
         traceRecord.name = "ACTION_DEFAULT"
         break
      }
       
      traceRecord.timeStamp = Date()
    
    do {
        try self.moc.save()
    } catch let error {
        // Handle the Core Data error.
        print("Can't save as expected!!!!")
        print("Error : \(error)")
      }
    
      // Always call the completion handler when done.
      completionHandler()
}

После экспериментов с разными вариантами. Я видел, как функция userNotificationCenter: didReceive: withCompletionHandler вызывается, но блок переключателя внутри, похоже, не выполняется, даже часть по умолчанию.

Может ли кто-нибудь указать, что я неправильно следую справочный документ, чтобы он не работал?

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