iOS:手机锁定时本地通知显示速度很慢
Posted
技术标签:
【中文标题】iOS:手机锁定时本地通知显示速度很慢【英文标题】:iOS: Local notification very slow to show up when phone locked 【发布时间】:2016-06-07 15:46:04 【问题描述】:我们一直在用 Swift 开发一个 ios 应用程序(仅限 iOS 9+)。我们对某些事情使用 VOIP 通知,然后使用本地通知将消息实际显示给用户。
我的问题是,当手机被锁定时,本地通知可能需要长达 15 秒才能真正显示出来,即使我可以看到我的调试输出并且代码在我期望的时候立即运行。
这是我显示通知的代码:
let notification = UILocalNotification()
notification.alertTitle = "Title text.".local
notification.alertBody = "Body text."
notification.alertAction = "Action".local
notification.category = Notification.CallCategory
notification.soundName = localNotificationSoundName
notification.userInfo = msg.dictionary()
UIApplication.sharedApplication().presentLocalNotificationNow(notification)
除了延迟之外,一切都按预期工作,当手机未锁定时,没有延迟并且通知按预期工作。
有什么想法吗?
编辑
作为说明,此代码在驻留在我们的 PKPushRegistryDelegate 实现中的开关/案例中运行。特别是在这个函数中:
func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!)
另外值得注意的是,这并非在每台设备上都会发生。我们有一台 iPhone 6s 测试设备,每次都会发生这种情况,无论我们重启设备、重新安装应用程序甚至将 iOS 升级到更新版本多少次。我们还有一些其他测试设备不会发生这种情况。
【问题讨论】:
我不确定(因此这是评论,而不是答案),但我猜 iOS 在睡眠模式下不会优先通知通知。或者它每隔几秒钟才获取一次通知,以最大限度地提高电池电量。这可以解释当手机解锁时通知按预期工作。 不是这样,因为应用程序正在使用 VOIP 通知并在后台运行。不过,这个问题变得越来越陌生,因为它并没有在我们所有的测试设备上发生。它可以在一些设备上重复,但不是全部。重启设备,安装/卸载甚至更新iOS版本也不会影响它。 检查一次 facebook messenger 应用程序。我猜它使用本地通知进行呼叫。检查它是否延迟 10-15 秒!我确实经历过本地通知没有在准确的时间触发,所以它可能是一种系统设计,在准确的时间给予本地通知的优先级较低。 这段代码在哪里运行?你能发布完整的功能吗? 这段代码在我们的 PKPushRegistryDelegate 实现中运行,特别是在这个函数中:func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!) 【参考方案1】:从 Apple 文档中阅读 -
优先考虑远程通知传递
您的服务器向 Apple Notification 提供的远程通知 服务包括多种元素,包括有效载荷数据、 到期日期、优先级等。远程通知支持 两级推送优先级。一个传递通知 立即地。另一个延迟通知的传递,直到 节能时间。除非通知确实需要 立即发货,请使用延期发货方式。
NotificationBestPractices
我知道您的问题是因为local notification
速度慢,但仍要确保您有优先远程通知。
我在测试该应用程序使用本地通知时遇到了一定的延迟。也许这就是系统的设计方式,不一定是缺陷。对于 VOIP 情况,我仍然认为您应该使用推送通知来通知呼叫(也许您在发出通知之前有一些内部计算)。但是请查看 Facebook Messenger 应用程序,它看起来确实混合了匹配推送/本地通知来通知用户来电。尝试观察延迟(如果有)。
制作另一个简单的应用程序,显示与上述相同代码的本地通知,并观察它是否也有一些延迟。对于这个测试,不要使用远程通知来触发本地通知,只需在应用启动后测试或类似的东西。这是为了确保系统是否在推送通知后立即延迟某些应用程序通知?
【讨论】:
非常好的观察结果,我会考虑创建一个测试应用程序来测试本地通知。我们正在使用 VOIP 通知,因为我们一直认为它们的传递速度最快。在我们的例子中,另一端有一个人在等待对方回答/拒绝,所以每一秒都很重要。 @VilleRinne 您对此有什么解决方案吗?我们也面临同样的问题。【参考方案2】:请尝试设置->常规->重置->重置网络设置
【讨论】:
【参考方案3】:我找到了可能的原因 - iPhone 与 Apple Watch 配对。尽管手表在抽屉里并关闭了,iPhone 还是试图将通知发送给它。在我们从手表上取消配对 iPhone 并等待一段时间后,一切都变得正常了。
【讨论】:
以上是关于iOS:手机锁定时本地通知显示速度很慢的主要内容,如果未能解决你的问题,请参考以下文章