【发布时间】: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!)
标签: ios xcode swift notifications apple-push-notifications