我正在开发一款监控iBeacon地区的iOS应用。当应用程序在后台运行时,我希望它在遇到特定的iBeacon区域时发送本地通知。一切正常,除了一件事:locationManager:didEnterRegion显然不会被调用,直到用户显示锁定屏幕。因此,即使设备在应用程序处于后台时通过iBeacon区域,他们也不会在显示锁定屏幕之前收到通知。
我也尝试过使用startMonitoringForRegion,这种工作方式 - 如果应用程序在后台运行,则locationManager:didDetermineState:当设备进入iBeacon区域时触发。但是,它只执行一次 - 如果用户随后退出并重新进入iBeacon区域,则locationManager:didDetermineState不会再次触发。
我正在运行iPhone 5s并使用iPhone 4s作为iBeacon,如果这有任何区别的话。
更正:这种现象显然只发生在我使用iPhone 4s作为客户端时。如果我使用5s,通知会立即发送。
答案 0 :(得分:5)
试图获取更多信息。您是否在CLBeaconRegion上将notifyEntryStateOnDisplay设置为YES?听起来很像。
来自文档:
设置为YES时,位置管理器会在用户打开显示器并且设备已在区域内时发送信标通知。即使您的应用未运行,也会发送这些通知。在这种情况下,系统会将您的应用程序启动到后台,以便它可以处理通知。在这两种情况下,位置管理器都会调用locationManager:didDetermineState:forRegion:其委托对象的方法。
此属性的默认值为NO。
答案 1 :(得分:1)
我也有类似的问题,并尝试了上面详述的各种代码级别更改(以及其他帖子)。测距工作但输入和退出区检测没有。
原来我关闭了App Background Refresh。启用后台应用程序后,刷新区域的输入和退出工作正常。
答案 2 :(得分:0)
我遇到了完全相同的问题。 我确信我已经把一切都搞定了。
解决方案非常简单:只需从设备中完全删除应用程序,然后在Xcode中再次运行即可 。它对我来说就像一个魅力。