【发布时间】:2019-05-16 22:06:41
【问题描述】:
我有一个 iOS 应用程序,它为远程通知启用了后台模式。贯穿始终的CLLocationManager 实例是通过requestAlwaysAuthorization 授权的。
我有一个内部逻辑,可以在收到来自 didReceiveRemoteNotification 的静默推送通知 (content-available: 1) 时触发应用程序,该通知进一步调用 CLLocationManager 对象上的 requestLocation。
当应用程序处于前台时,一切正常,并且应用程序在收到静默推送后的一段时间内从 iOS 接收位置更新。
但是,在应用程序处于后台的情况下,didReceiveRemoteNotification 会被正确触发,requestLocation 会被调用。但是,在此之后的很长一段时间内,我都没有收到对 didUpdateLocations 的任何点击。之后,当应用再次回到前台时,通过回调接收位置更新。
因此,看起来该应用正在等待进入前台以触发位置更新(尽管很久以前就已请求)。
- 这背后的逻辑原因是什么?或者,这是否特定于任何设备或 iOS 版本?
- 有什么办法可以解决这个问题?
【问题讨论】:
-
您应该显示您的代码,但您需要 1) 在收到位置更新之前不要调用完成处理程序,或者 2) 使用
beginBackgroundTask延长后台运行时间,直到您获得位置更新 -
@Paulw11 抱歉,由于涉及敏感信息,无法按原样共享代码。这实际上是在另一个示例项目上工作,该示例项目是为测试此功能而创建的,但不适用于我们的主项目。所以我试图看看我可能错过了什么。而且,completionHandler 在收到更新之前不会被调用。
-
@Paulw11 而且,我已经在问题中包含了所有对方法的调用。
-
如果您无法共享代码,那么您将很难为您提供帮助。这就是你在 in
didRecieveRemoteNotification所做的事情,这就是问题所在。简单地告诉我们你正在调用的函数和你已经实现的委托方法是没有帮助的。 -
@Paulw11 抱歉延迟回复。我也理解。但是,我一直在运行一个示例应用程序来演示相同的情况是不可行的。但是,后来我确实找到了问题的根本原因。可能很快就会在下面添加它。
标签: ios objective-c push-notification core-location cllocationmanager