首页 > 解决方案 > 在用户点击通知之前不调用 application(_:didReceiveRemoteNotification:fetchCompletionHandler)

问题描述

我在几个地方看到:

  1. https://www.raywenderlich.com/11395893-push-notifications-tutorial-getting-started

如果您的应用在前台或后台运行,系统会通过调用 application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 通知您的应用。当用户通过点击推送打开应用时,iOS 可能会再次调用该方法,因此您可以更新 UI 并显示相关信息。

  1. https://medium.com/fenrir-inc/handling-ios-push-notifications-the-not-so-apparent-side-420891ddf10b

背景:通知到达时。+ 如果用户在应用程序进入前台之前点击通知。

如果我设置"content-available": 1并向通知添加一些数据有效负载,则当我的应用程序在后台然后当用户点击通知时,该方法application(_:didReceiveRemoteNotification:fetchCompletionHandler)将被调用两次(除非我设置委托)。UNUserNotificationCenter

不幸的是,我没有注意到这种行为,上面的方法只在用户点击通知后被调用一次。

我尝试发送的通知类似于:

{
  "aps": {
    "alert": "Test",
    "sound": "default",
    "content-available": 1
  },
  "test": "abc"
}

iOS 13/14 有什么变化(Ray Wenderlich 教程似乎是最新的)还是我遗漏了什么?

编辑

有趣的是,多次重新安装该应用程序后,它开始工作。我设置了 UNNotificationCenterdelegate,它的工作方式如下:

  1. 应用程序在后台,服务器发送通知content-available: 1
  2. 系统显示警报并被application(_:didReceiveRemoteNotification:fetchCompletionHandler:)调用,以便我可以获取新数据。
  3. 用户点击警报,userNotificationCenter(_:didReceive:withCompletionHandler:)被调用,因此我可以导航到特定视图。

这是处理带有数据有效负载的推送通知的正确方法吗?

标签: iosswiftunusernotificationcenter

解决方案


推荐阅读