iBeacons:如果app在后台,locationManager:didEnterRegion:仅在locking屏幕显示时被调用
我正在为监视iBeacon地区的iOS应用程序工作。 当应用程序在后台运行时,我希望它在遇到特定的iBeacon区域时发送本地通知。 一切工作正常,除了一件事︰locationManager:didEnterRegion显然不会被调用,直到用户显示locking屏幕。 因此,即使设备在应用程序处于后台时通过iBeacon区域,它们也不会在显示locking屏幕之前收到通知。
我也尝试过使用startMonitoringForRegion,这种工作 – 如果应用程序在后台运行,locationManager:didDetermineState:当设备进入iBeacon区域时触发。 但是,它只会这样做 – 如果用户随后退出并重新进入iBeacon区域,则locationManager:didDetermineState不会再次触发。
我正在运行iPhone 5s,并使用iPhone 4s作为iBeacon,如果这有什么区别的话。
更正:这种现象显然只有当我使用iPhone 4s作为客户端时才会发生。 如果我使用5秒,则通知立即发送。
只是想获得更多的信息。 你有没有在CLBeaconRegion上设置notifyEntryStateOnDisplay为YES? 听起来像这样。
从文档:
当设置为YES时,位置pipe理器在用户打开显示器并且设备已经在区域内时发送信标通知。 即使您的应用程序未运行,也会发送这些通知。 在这种情况下,系统会将您的应用程序启动到后台,以便处理通知。 在这两种情况下,位置pipe理器调用其委托对象的locationManager:didDetermineState:forRegion:方法。
该属性的默认值是NO。
我也有类似的问题,并尝试了上面(和其他职位)详细的各种代码级别的变化。 测距工作,但进入和退出区检测没有。
事实certificate,我closures了应用程序背景刷新。 一旦我启用后台应用程序刷新进入和退出的区域正常工作。
我有完全相同的问题。 我确定我已经设置好了。
解决scheme非常简单:只需从设备上彻底删除应用程序,然后在Xcode中再次运行。 它对我来说就像一个魅力。
- iOS从后台重新检查加载位置
- 调用CLLocationManager stopUpdatingLocation后内部GPS天线是否立即停止工作?
- 使用iOS Geofencing跟踪多个(20+)位置
- 检查iOS位置服务
- 在自己的类中的Objective-C源码locationManager
- 如何以编程方式显示自定义用户位置
- CLLocationManager geo-fencing / startMonitoringForRegion:vs. startMonitoringForSignificantLocationChanges:与10分钟的startUpdating调用
- didUpdateLocations未被调用
- Objective C,iOS 7 – CLLocationManager:didUpdateLocations只被调用一次