【问题标题】:iBeacons: If app is in background, locationManager: didEnterRegion: is called only when lock screen displayediBeacons:如果应用在后台,locationManager:didEnterRegion:仅在锁屏显示时调用
【发布时间】:2013-10-26 09:50:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios cllocationmanager ibeacon


    【解决方案1】:

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

    来自文档:

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

    此属性的默认值为 NO。

    【讨论】:

    • notifyEntryStateOnDisplay 设置为 YES。如果我启动应用程序,然后打开 iBeacon,无论应用程序是在前台还是在后台,didDetermineState 都会触发,一切都很好。但是,如果我随后关闭 iBeacon,稍等片刻,然后再次打开,无论应用程序处于前台还是后台,didDetermineState 都不会再次触发。我已经检查过了,我没有在任何地方调用 stopMonitoringForRegion。它几乎似乎被设计为只触发一次。
    • 我想我明白了——我假设一切都会实时发生,但根据以下链接,有时您必须在关闭和重新打开 iBeacon 之间等待几分钟.果然,等我等了五分钟,委托方法又开始触发了。
    【解决方案2】:

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

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

    【讨论】:

    • 您能解释一下您是如何将应用后台刷新设置为开启的吗?
    • 当然可以。打开设置应用程序,然后单击常规 -> 后台应用程序刷新 -> 启用后台应用程序刷新
    • 仅供参考,Beacon 和地理围栏更新的后台应用刷新要求已被删除。这是 iOS 7 的要求,但不再是 iOS 8 的要求。您的应用不会出现在 iOS 8 的 BAR 应用列表中。
    【解决方案3】:

    我也遇到了同样的问题。 我确定我已经设置好了。

    解决方案非常简单:只需从设备中完全删除应用程序,然后在 Xcode 中再次运行它 .它对我很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多