在用户点击通知之前未调用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:),因此我可以导航到特定视图。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...