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中再次运行。 它对我来说就像一个魅力。