iOS 13 和无声通知
iOS 13 and silent notifications
我 运行 遇到了一个非常奇怪的问题,我无法完全确定根本原因。直到几周前,我们的应用程序才能正常运行 ios12 和 ios13 的 background/silent 通知。所以一些背景信息:
- 我们使用 SNS 发送 visual/audible 和静默后台通知。
- 我们知道 apns-push-type header 是 ios13 所必需的。 SNS 自动处理这个新的 header 并且我们的手动测试(即没有 SNS)也产生了相同的结果。
- 静默通知(即 content-available: 1)总是在 ios13.3(或更高)上失败,但总是在 ios12.4(及更低)上运行。
- 在我们的 swift 代码中,我们使用 :didReceiveRemoteNotification:fetchCompletionHandler 进行静默通知。我们还使用了 userNotificationCenter(带有 willPresent 和 didReceive)。每当我们发送 audible/visual 通知时,willPresent 都会在 ios12 和 ios13 上触发。在 ios12 上,静默通知会触发 didReceiveRemoteNotification:fetchCompletionHandler,但在 ios13 上不会触发。
- 在我们的测试期间,我们成功地发送了一个空警报类型来触发 ios13 上的静默通知,这也适用于 ios12(这会触发 willPresent)。这对我来说感觉像是一个 hack,因为它可能会暂时唤醒设备,如果应用程序在后台 运行,通知就会消失。
- 在其他视图控制器中,我们正在观察 NotificationCenter 以获取接收到的消息以采取适当的操作。
在我看来,{"content-available": 1} 从来没有对 ios13 有效,但对 ios12 有效。此外,didReceiveRemoteNotification:fetchCompletionHandler 永远不会在 ios13 上被调用,但会在 ios12 上被调用。我们使用静默通知(即使用 content-available:1)的目的是在应用程序处于前台或后台时发生更改时刷新我们服务的详细信息。
如有任何帮助,我们将不胜感激。
我能够解决这个问题。然而,在我开始解决这个问题之前,我想提一下,我 运行 只在 iOS13 上遇到过这个问题,并且有静默通知。相同的代码与具有相同功能的 iOS12 一起使用。
我们的应用程序有一个单独的屏幕,用于在应用程序首次启动时请求通知权限。在此阶段,我们注册设备以接收通知。下次启动应用程序时,我们不会再显示此屏幕。为了让它在 ios13 上运行,我们必须每次都在 AppDelegate 的 didFinishLaunchingWithOptions 中重新注册 APNS。同样,在 iOS12 上,静默通知无需重新注册 APNS 即可正常工作,但在 iOS13 上,我们必须每次都重新注册。
我希望这可以帮助其他 运行 解决这个问题。
我 运行 遇到了一个非常奇怪的问题,我无法完全确定根本原因。直到几周前,我们的应用程序才能正常运行 ios12 和 ios13 的 background/silent 通知。所以一些背景信息:
- 我们使用 SNS 发送 visual/audible 和静默后台通知。
- 我们知道 apns-push-type header 是 ios13 所必需的。 SNS 自动处理这个新的 header 并且我们的手动测试(即没有 SNS)也产生了相同的结果。
- 静默通知(即 content-available: 1)总是在 ios13.3(或更高)上失败,但总是在 ios12.4(及更低)上运行。
- 在我们的 swift 代码中,我们使用 :didReceiveRemoteNotification:fetchCompletionHandler 进行静默通知。我们还使用了 userNotificationCenter(带有 willPresent 和 didReceive)。每当我们发送 audible/visual 通知时,willPresent 都会在 ios12 和 ios13 上触发。在 ios12 上,静默通知会触发 didReceiveRemoteNotification:fetchCompletionHandler,但在 ios13 上不会触发。
- 在我们的测试期间,我们成功地发送了一个空警报类型来触发 ios13 上的静默通知,这也适用于 ios12(这会触发 willPresent)。这对我来说感觉像是一个 hack,因为它可能会暂时唤醒设备,如果应用程序在后台 运行,通知就会消失。
- 在其他视图控制器中,我们正在观察 NotificationCenter 以获取接收到的消息以采取适当的操作。
在我看来,{"content-available": 1} 从来没有对 ios13 有效,但对 ios12 有效。此外,didReceiveRemoteNotification:fetchCompletionHandler 永远不会在 ios13 上被调用,但会在 ios12 上被调用。我们使用静默通知(即使用 content-available:1)的目的是在应用程序处于前台或后台时发生更改时刷新我们服务的详细信息。
如有任何帮助,我们将不胜感激。
我能够解决这个问题。然而,在我开始解决这个问题之前,我想提一下,我 运行 只在 iOS13 上遇到过这个问题,并且有静默通知。相同的代码与具有相同功能的 iOS12 一起使用。
我们的应用程序有一个单独的屏幕,用于在应用程序首次启动时请求通知权限。在此阶段,我们注册设备以接收通知。下次启动应用程序时,我们不会再显示此屏幕。为了让它在 ios13 上运行,我们必须每次都在 AppDelegate 的 didFinishLaunchingWithOptions 中重新注册 APNS。同样,在 iOS12 上,静默通知无需重新注册 APNS 即可正常工作,但在 iOS13 上,我们必须每次都重新注册。
我希望这可以帮助其他 运行 解决这个问题。