10

我正在开发一个监视 iBeacon 区域的 iOS 应用程序。当应用程序在后台运行时,我希望它在遇到特定 iBeacon 区域时发送本地通知。一切正常,除了一件事: locationManager: didEnterRegion 显然在用户显示锁定屏幕之前不会被调用。因此,即使设备在应用程序处于后台时通过了 iBeacon 区域,它们也不会在显示锁定屏幕之前收到通知。

我也尝试过使用 startMonitoringForRegion,这种方法很有效——如果应用程序在后台运行,locationManager: didDetermineState: 在设备进入 iBeacon 区域时触发。但是,它只会这样做一次——如果用户随后退出并重新进入 iBeacon 区域,则 locationManager: didDetermineState 不会再次触发。

我正在运行 iPhone 5s 并使用 iPhone 4s 作为 iBeacon,如果这有什么不同的话。

更正:这种现象显然只有在我使用 iPhone 4s 作为客户端时才会发生。如果我使用 5s,通知会立即发送。

4

3 回答 3

5

只是想获得更多信息。您是否在 CLBeaconRegion 上将 notifyEntryStateOnDisplay 设置为 YES?听起来像。

从文档:

当设置为 YES 时,位置管理器会在用户打开显示器并且设备已经在该区域内时发送信标通知。即使您的应用未运行,也会发送这些通知。在这种情况下,系统会将您的应用程序启动到后台,以便它可以处理通知。在这两种情况下,位置管理器都会调用其委托对象的 locationManager:didDetermineState:forRegion: 方法。

此属性的默认值为 NO。

于 2013-10-29T19:55:08.953 回答
1

我也遇到了类似的问题,并尝试了上面详述的各种代码级别更改(以及其他帖子)。测距工作,但进入和退出区域检测没有。

原来我关闭了应用程序后台刷新。一旦我启用后台应用程序刷新区域的进入和退出工作正常。

于 2013-12-29T19:46:53.293 回答
0

我遇到了完全相同的问题。我确信我已经设置好了。

解决方案非常简单:只需从设备中完全删除应用程序,然后在 Xcode 中再次运行它。它对我来说就像一种魅力。

于 2014-12-08T10:01:57.430 回答