首页 > 解决方案 > iOS通知声音被切断

问题描述

我有一个使用 Swift 4 在 iOS 10+ 上发布本地通知的应用程序。在我的测试和个人设备上一切正常,但是我有一些用户报告说自定义通知声音在一秒钟后就被切断了。

我不知道 iOS API 中的任何设置甚至可以让我控制它或它会如何发生。有问题的用户已尝试删除并重新安装该应用程序(以防有一些损坏的声音文件不知何故),这似乎没有帮助。

设备解锁后,声音播放正常。这仅在设备锁定时发生。

任何想法表示赞赏!

标签: iosuilocalnotification

解决方案


对我来说,这个问题是由网络竞争条件引起的。

有问题的应用程序在服务器向设备发送 VOIP APNs 通知的情况下工作,这实际上会唤醒应用程序(与不唤醒应用程序的标准 APNs 通知相反)。然后,该应用程序将针对收到的信息发布本地通知。当用户打开应用程序时,它会清除应用程序发布的所有本地通知。

我不确定这是什么时候开始发生的,但事实证明,当应用程序被远程通知唤醒时,它正在ViewDidAppear我的初始视图控制器中运行该功能,即使应用程序在后台运行并且不是启动或在屏幕上可见。此函数中的代码负责清除通知,但只有在它与服务器检查以确保它被允许这样做之后。因此,我们得到了一个奇怪的延迟(由于网络延迟),这将导致应用程序在通知出现时立即清除它们。这只有时会发生,因为通知总是安排在未来 1 秒后,所以如果网络调用发生得足够快,它就没有通知需要清除。

我的解决方案是将清除通知的逻辑放在DidBecomeActive处理程序中,而不是ViewDidAppear. 这立即解决了这个问题。


推荐阅读