如何回复点击UNUserNotification?

时间:2017-05-19 22:00:52

标签: ios notifications unusernotificationcenter

我在iOS 10中使用了新的UNUserNotification框架。我可以看到如何添加操作按钮,但是当用户点击通知本身时如何响应?就我而言,它将是带有一些文字的图像。

默认行为是应用程序打开。

  1. 我是否可以使用自定义代码检测我的应用程序是否因UNUserNotification点击而被打开,理想情况下是否有关于通知的标识符信息?

  2. 如果我的应用在后台运行或已关闭,这些会有效吗? UNUserNotification文档建议设置UNUserNotificationCenter的委托,但我认为只有在应用正在运行时才有效。

2 个答案:

答案 0 :(得分:5)

如果您尚未将AppDelegate设置为UNUserNotificationCenterDelegate,请将以下内容添加到didReceive方法中:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    let userInfo = ["identifier":response.notification.request.identifier]
    NotificationCenter.default.post(name: Notification.Name(rawValue: "userNotificationCenterDidReceiveResponse"), object: self, userInfo: userInfo)

    completionHandler()
}

然后您可以注册" userNotificationCenterDidReceiveResponse"通知并使用标识符做任何你喜欢的事情。无论您的应用处于什么状态,包括不运行,都可以使用。

如果这还不够清楚,我可以上传示例项目。

答案 1 :(得分:2)

使用UNUserNotificationCenter Delegates

当app位于前台时使用此功能:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler

notification

获取要使用的值

这是应用程序在后台的时候:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler

response获取要使用的值。

希望这会有所帮助。