Я пытаюсь следовать этому документу , чтобы установить некоторые уведомления в моем приложении. Но он работает только частично.
Точнее, я получаю уведомление, как и ожидалось, но не получаю выбор ответов (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 вызывается, но блок переключателя внутри, похоже, не выполняется, даже часть по умолчанию.
Может ли кто-нибудь указать, что я неправильно следую справочный документ, чтобы он не работал?