我有一个应用程序可以使用Swift 4在iOS 10+上发布本地通知。一切都可以在我的测试和个人设备上正常运行,但是我有一些用户报告自定义通知声音仅在一秒钟后就会消失。
我不知道iOS API中的任何设置,甚至都无法控制它或它将如何发生。有问题的用户尝试删除并重新安装该应用程序(以防万一某些声音文件损坏),但这似乎无济于事。
解锁设备后,声音会正常播放。这仅在设备锁定时发生。
任何想法表示赞赏!
答案 0 :(得分:1)
对我来说,此问题是由网络竞争状况引起的。
有问题的应用程序可以在服务器向设备发送VOIP APNs通知的情况下运行,该通知实际上会唤醒应用程序(与不唤醒应用程序的标准APNs通知相反)。然后,该应用将针对收到的信息发布本地通知。当用户打开该应用程序时,它将清除该应用程序发布的所有本地通知。
我不确定这种情况何时开始发生,但是事实证明,当应用程序被远程通知唤醒时,即使我在应用程序的初始视图控制器中运行了ViewDidAppear
函数在后台运行且未启动或在屏幕上不可见。
此功能中的代码负责清除通知,但只有在与服务器核实以确保允许这样做后,该代码才起作用。
因此,我们有一个奇怪的延迟(由于网络延迟),这将导致应用程序在出现通知后立即清除它们。
有时仅会发生这种情况,因为通知总是安排在将来的1秒钟,因此,如果网络通话发生得足够快,则没有要清除的通知。
我的解决方案是将清除通知的逻辑放在DidBecomeActive
处理程序中,而不是ViewDidAppear
中。这立即解决了问题。