gpt4 book ai didi

ios - 如何知道应用程序何时收到通知以及用户何时在 iOS 中单击通知

转载 作者:可可西里 更新时间:2023-11-01 05:39:51 24 4
gpt4 key购买 nike

我知道有很多关于这个主题的文章,但我就是找不到正确的答案。

有没有办法知道用户何时收到远程通知以及用户何时在 iOS 8 上单击了一个通知。我想知道这一点,因为当我收到它时我想保存它,当用户点击它时我想打开一些 View 。

我找到了这个答案 https://stackoverflow.com/a/16393957/1241217但问题是当用户在应用程序中并打开通知中心并单击一个时,该应用程序不是处于非事件状态并且不在后台。

我也找到了这个答案 https://stackoverflow.com/a/12937568/1241217但我知道只有当应用程序被终止并从新启动时才会运行。

我也不想这样做https://stackoverflow.com/a/32079458/1241217因为我需要检测何时收到通知。

那么有没有办法知道用户是否只点击了通知。据我所知,它必须在 didReceiveRemoteNotification 中完成,但我不知道如何区分它们。我需要 iOS 10 之前的答案,因为应用目标是 iOS 8。

我的解决方案:

正如我在 Shabbir Ahmad 回答的评论中所写,我的解决方案是记住应用程序真正生效的日期和收到通知的日期。如果这两个日期之间的差异是一秒或更短,我会在用户点击通知时接受。

最佳答案

您必须实现 UNUserNotificationCenterDelegate 及其方法userNotificationCenter(_:willPresent:withCompletionHandler:)userNotificationCenter(_:didReceive:withCompletionHandler:) 当用户点击通知时调用。在 willPresent: 中,您必须使用一个选项调用 completionHandler,该选项指示当应用程序处于前台时通知到达时应该发生什么。

注册这样的委托(delegate)很容易:

UNUserNotificationCenter.current().delegate = self

例如:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler(UNNotificationPresentationOptions.alert)
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
if let userInfo = userInfo as? [String: Any] {
// TODO: implement your logic
// just don't forget to dispatch UI stuff on main thread
}
}

您可以通过 AppDelegate 实现该委托(delegate),也可以通过任何 NSObject 实现该委托(delegate),我会选择后者以保持 AppDelegate 尽可能干净可能。

P.S.: 当然,这假设您已被用户授予权限 (UNUserNotificationCenter.current().requestAuthorization(options:completionHandler:)) 并且您已注册接受通知 (UIApplication.shared.registerForRemoteNotifications()).

阅读更多 Scheduling and Handling Local Notifications , Responding to the Delivery of Notifications 部分 - 虽然该部分是关于本地通知的,但它与远程通知完全相同(它们由同一个委托(delegate)处理)。

关于ios - 如何知道应用程序何时收到通知以及用户何时在 iOS 中单击通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49065137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com