当应用程序处于未运行或后台状态时,如何处理推送通知有效负载而不点击它
Posted
技术标签:
【中文标题】当应用程序处于未运行或后台状态时,如何处理推送通知有效负载而不点击它【英文标题】:How to handle push notification payload without tapping it when the app is in not running or background state 【发布时间】:2018-12-19 11:56:42 【问题描述】:我必须在本地存储来自我的 ios 应用程序的所有通知的标题和正文,并将它们显示在通知屏幕中。我可以使用这些存储所有点击的通知-
当应用程序处于非运行状态或点击推送通知时被终止-
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) ...
当应用程序在前台或后台运行并点击推送通知时调用此方法-
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) ...
我的问题是如何在不点击通知的情况下存储通知。 即使通知被用户拒绝/清除,我也想存储通知。
我知道当应用程序处于活动状态并在前台并推送通知时调用此方法-
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) ..
当应用程序处于后台或未运行状态时,如何处理推送通知数据而不点击它?
【问题讨论】:
AFAIK 无法在您的应用程序未处于运行状态时处理通知 - 至少在您不使用 VOIP 的情况下是这样。我有一个非常相似的问题,在这里写了一个问题(没有成功)***.com/questions/51055491/… @Teetz 有没有办法在用户下次打开应用时处理通知数据? 我不是 100% 确定,但我不这么认为。这样做的 AFAIK 应用程序将其推送通知存储在其后端服务器上,并在应用程序启动时要求后端获取所有远程通知数据。 【参考方案1】:1- 如果应用未运行,则无法仅使用 (VOIP) 唤醒应用
2- 如果在后台,则将此密钥添加到发送的有效负载中
“content_available”:真
并从应用功能启用 RemoteNotifications
【讨论】:
1- 我不想在收到通知时唤醒未运行的应用程序。有没有办法在用户下次打开应用程序时获取通知数据? 2-当“content_available”时我可以通过哪种方法获取通知数据:有效载荷中有没有? 1 - 如果您将content_available
设置为 1 或 true 并且您的应用程序处于后台,则 func application(_: didReceiveRemoteNotification: fetchCompletionHandler:)
将在无需用户操作的情况下立即调用,但您必须在 30 内调用 completionHandler
自调用该方法以来的秒数。如果您没有content_available
,那么当用户点击警报或将应用程序置于前台时,将调用上述方法。以上是关于当应用程序处于未运行或后台状态时,如何处理推送通知有效负载而不点击它的主要内容,如果未能解决你的问题,请参考以下文章