在AppDelegate Swift中获取本地通知的正文或标识符

每当应用收到动作响应时,我想在AppDelegate.swift中访问我的应用程序数据。 我试图使用

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { if response.actionIdentifier == "check" { //do something to the app's data } completionHandler() } 

方法,但我无法找到数据,因为我无法获取通知的标识符或其正文。 有人可以帮助我吗? 非常感谢你们。

更多代码:

 //Setting content of the notification let content = UNMutableNotificationContent() content.title = "Scheduled Task" content.body = taskDescriptionTextField.text! content.badge = 1 content.sound = UNNotificationSound.default() content.categoryIdentifier = "alertCategory" //Setting time for notification trigger let date = datePicker.date let dateCompenents = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second], from: date) let trigger = UNCalendarNotificationTrigger(dateMatching: dateCompenents, repeats: false) //Adding Request let request = UNNotificationRequest(identifier: taskDescriptionTextField.text!, content: content, trigger: trigger) UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) 

做:

 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print("original identifier was : \(response.notification.request.identifier)") print("original body was : \(response.notification.request.content.body)") print("Tapped in notification") } 

基本上它是什么,是你得到一个UNNotificationResponse实例。 该对象有两个属性。

  • var actionIdentifier: String
  • var notification: UNNotification < - 你需要使用这个。

此外,还可以在此处找到UNUserNotification框架的非常好的教程


如果你想知道用户在发出通知时选择了哪个动作,你只使用actionIdenfier (他们只是点击它了吗?他们只是解雇了它?!或者他们选择了customAction?!)

//来自Apple文档:用户可以从中选择的操作标识符:

 * UNNotificationDismissActionIdentifier if the user dismissed the notification * UNNotificationDefaultActionIdentifier if the user opened the application from the notification * the identifier for a registered UNNotificationAction for other actions 

这意味着,您可以使用以下内容:

 switch actionIdentifier { case UNNotificationDismissActionIdentifier: // Notification was dismissed by user // Do something completionHandler() case UNNotificationDefaultActionIdentifier: // App was opened from notification // Do something completionHandler() // Do something else case customAction: completionHandler() default: completionHandler() } 

要创建自定义操作,您应该:

  • 在类别中创建操作
  • 注册类别

有关更多信息,请参阅WWDC 2016 Advance Notifications的这一时刻