ios - iOS通知声音被切断
问题描述
我有一个使用 Swift 4 在 iOS 10+ 上发布本地通知的应用程序。在我的测试和个人设备上一切正常,但是我有一些用户报告说自定义通知声音在一秒钟后就被切断了。
我不知道 iOS API 中的任何设置甚至可以让我控制它或它会如何发生。有问题的用户已尝试删除并重新安装该应用程序(以防有一些损坏的声音文件不知何故),这似乎没有帮助。
设备解锁后,声音播放正常。这仅在设备锁定时发生。
任何想法表示赞赏!
解决方案
对我来说,这个问题是由网络竞争条件引起的。
有问题的应用程序在服务器向设备发送 VOIP APNs 通知的情况下工作,这实际上会唤醒应用程序(与不唤醒应用程序的标准 APNs 通知相反)。然后,该应用程序将针对收到的信息发布本地通知。当用户打开应用程序时,它会清除应用程序发布的所有本地通知。
我不确定这是什么时候开始发生的,但事实证明,当应用程序被远程通知唤醒时,它正在ViewDidAppear
我的初始视图控制器中运行该功能,即使应用程序在后台运行并且不是启动或在屏幕上可见。此函数中的代码负责清除通知,但只有在它与服务器检查以确保它被允许这样做之后。因此,我们得到了一个奇怪的延迟(由于网络延迟),这将导致应用程序在通知出现时立即清除它们。这只有时会发生,因为通知总是安排在未来 1 秒后,所以如果网络调用发生得足够快,它就没有通知需要清除。
我的解决方案是将清除通知的逻辑放在DidBecomeActive
处理程序中,而不是ViewDidAppear
. 这立即解决了这个问题。
推荐阅读
- reactjs - 使用可滚动变体并调整浏览器窗口大小时,材质 UI 选项卡将消失
- android - 在撰写中更改 SelectionContainer 中选择文本的颜色
- gdb - 如何在缓冲区溢出中查找地址并查看堆栈?
- r - R中是否有用于受限范围相关性的包/命令?
- ssl - 使用 ca cert(.crt 或 .pem)配置 Kafka 客户端
- c# - 为 MAUI Visual Studio 2022 安装 Android 工作负载时出现问题
- python - Django 仅从数据库中加载必要的数据
- multithreading - 使用异步 Rpc 客户端的 Flask 服务器只回答两个请求中的一个
- c++ - 修改包含后 Intellisense 停止工作
- c++ - 如何解决此 C6385 代码分析警告:读取无效数据