iOS 13 和静音通知

Posted

技术标签:

【中文标题】iOS 13 和静音通知【英文标题】:iOS 13 and silent notifications 【发布时间】:2020-04-20 19:07:02 【问题描述】:

我遇到了一个非常奇怪的问题,我无法确定根本原因。直到几周前,我们的应用程序才能正常运行 ios12 和 ios13 的后台/静默通知。所以一点背景信息:

    我们使用 SNS 发送视觉/听觉和静音背景通知。 我们知道 ios13 需要 apns-push-type 标头。 SNS 自动处理这个新标头,我们的手动测试(即没有 SNS)也产生了相同的结果。 静默通知(即内容可用:1)在 ios13.3(或更高版本)上总是失败,但在 ios12.4(及更低版本)上总是有效。 在我们的 swift 代码中,我们使用 :didReceiveRemoteNotification:fetchCompletionHandler 进行静默通知。我们还使用了 userNotificationCenter(带有 willPresent 和 didReceive)。每当我们发送声音/视觉通知时,将在 ios12 和 ios13 上触发 willPresent。在 ios12 上,静默通知触发 didReceiveRemoteNotification:fetchCompletionHandler 但在 ios13 上没有。 在我们的测试过程中,我们成功发送了一个空警报类型来触发 ios13 上的静默通知,这也适用于 ios12(这会触发 willPresent)。这对我来说就像是一个 hack,因为它可能会暂时唤醒设备,如果应用程序在后台运行,通知将会消失。 在其他视图控制器中,我们正在观察 NotificationCenter 以了解收到的消息以采取适当的措施。

在我看来,"content-available": 1 永远不会在 ios13 上运行,但在 ios12 上运行。 didReceiveRemoteNotification:fetchCompletionHandler 也永远不会在 ios13 上被调用,但会在 ios12 上调用。我们使用静默通知(即 content-available:1)的目的是在应用程序处于前台或后台时发生更改时刷新我们服务的详细信息。

任何帮助将不胜感激。

【问题讨论】:

***.com/a/58525437/341994 @matt:感谢您分享链接,但我认为这与此处无关,主要是因为静默通知未到达或未正确处理(简单的打印语句根本不显示任何内容) ios13 但他们在 ios12 上使用相同的代码。 这个链接告诉你如何观察通知到达系统级别。 【参考方案1】:

我能够解决这个问题。然而,在我进入解决方案之前,我想提一下,我只在 iOS13 上遇到了这个问题,并且没有提示通知。相同的代码与具有相同功能的 iOS12 一起使用。

我们的应用有一个单独的屏幕,用于在应用首次启动时请求通知权限。在这个阶段,我们为设备注册通知。下次启动应用程序时,我们不再显示此屏幕。为了让它在 ios13 上运行,我们必须每次都在 AppDelegate 的 didFinishLaunchingWithOptions 中重新注册 APNS。同样,在 iOS12 上,静默通知无需重新注册 APNS 即可工作,但在 iOS13 上,我们必须每次都重新注册。

我希望这可以帮助其他遇到此问题的人。

【讨论】:

以上是关于iOS 13 和静音通知的主要内容,如果未能解决你的问题,请参考以下文章

当设备处于静音状态时,iOS可以播放本地通知声音

当我的 iOS 应用程序处于前台时,如何使本地通知静音?

ios 决定是不是在客户端代码的某些条件下静音我的远程通知,而不是设置内容可用

如何使本地 APNS 推送通知静音?

Android如何给通知channel静音

Android如何给通知channel静音