iOS:手机锁定时,本地通知显示速度非常慢

iOS:手机锁定时,本地通知显示速度非常慢,ios,xcode,swift,notifications,apple-push-notifications,Ios,Xcode,Swift,Notifications,Apple Push Notifications,我们一直在用Swift开发一个iOS应用程序(仅限iOS 9+)。我们对某些事情使用VOIP通知,然后使用本地通知向用户实际显示消息 我的问题是,当手机被锁定时,本地通知可能需要15秒才能真正显示出来,即使我可以看到调试输出和代码在我期望的时候立即运行 这是我显示通知的代码: let notification = UILocalNotification() notification.alertTitle = "Title text.".local notification.ale

我们一直在用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!)

此外,值得注意的是,并非所有设备都会发生这种情况。我们有一台iphone6s测试设备,无论我们重新启动设备多少次,重新安装应用程序多少次,甚至将iOS升级到新版本,每次都会发生这种情况。我们还有一些其他的测试设备没有出现这种情况。

请阅读苹果文档-

确定远程通知传递的优先级

服务器向Apple通知服务器提供的远程通知 服务包括各种元素,包括有效负载数据、 过期日期、优先级等。远程通知支持 两级推送优先级。一个人递送通知 马上。另一个延迟通知的传递,直到 节能时间。除非通知确实需要 立即交付,使用延迟交付方法

  • 我知道您的问题是本地通知的速度太慢,但仍然要确保您已确定远程通知的优先级

  • 我在测试时遇到过这样的情况:当使用本地通知时,应用程序会有一定的延迟。也许这就是系统的设计方式,而不一定是一个缺陷。对于VOIP的情况,我仍然认为您应该使用推送通知来通知呼叫(可能在发出通知之前您有一些内部计算)。但请查看Facebook messenger应用程序,它看起来确实混合了推送/本地通知来通知用户呼叫。如果有延迟,尝试观察延迟

  • 制作另一个简单的应用程序,显示相同代码的本地通知,并观察是否也有延迟。对于此测试,不要使用远程通知来触发本地通知,只需在应用程序启动后或类似的情况下进行测试。这是为了确保系统是否在推送通知后立即延迟特定应用程序的案例通知


  • 请尝试设置->常规->重置->重置网络设置

    我找到了可能的原因-iPhone与Apple Watch配对。尽管手表在抽屉里并且已经关机,iPhone还是试图将通知发送到它。在我们从手表上取下未配对的iPhone并等待一段时间后,一切都恢复正常。

    我不确定(因此这是一条评论,而不是答案),但我想当它处于睡眠模式时,iOS不会优先考虑通知。或者它每隔几秒钟只获取一次通知,以最大限度地提高电池电量。这就解释了当手机解锁时,通知按预期工作的原因。事实并非如此,因为应用程序正在使用VOIP通知,并且在后台运行。不过,这个问题越来越奇怪,因为它并没有发生在我们所有的测试设备上。它可以在一些设备上重复,但不能在所有设备上重复。重新启动设备、安装/卸载或更新iOS版本对其也没有影响。请检查一次facebook messenger应用程序。我猜它使用本地通知进行呼叫。检查其延迟是否为10-15秒!我确实遇到过本地通知没有在准确时间触发的情况,所以可能这是一种系统设计,可以在准确时间内降低本地通知的优先级。这段代码在哪里运行?你能发布完整的函数吗?这段代码是在我们的PKPushRegistryDelegate实现中运行的,特别是在这个函数中:func pushRegistry(注册表:PKPushRegistry!,didReceiveIncomingPushWithPayload:PKPushPayload!,forType:String!)非常好的观察结果,我将研究创建一个测试应用程序,仅用于测试本地通知。我们之所以使用VOIP通知,是因为我们的印象是,它们的发送速度最快。在我们的例子中,有一个人在另一端等待另一个人回答/拒绝,所以每一秒都很重要。@VilleRinne你有什么解决办法吗?我们也面临同样的问题。