在未运行时调用应用程序并在范围内调用iBeacon

时间:2014-02-04 09:21:34

标签: ios iphone bluetooth-lowenergy ibeacon

我正在开发一款iPhone应用程序,当用户进入iBeacon区域时会通知用户。

我对此有几个问题:

来自文件:

  

监控在iBeacon区域输入时启动app   监测。

但行为是:

仅在手机被唤醒时才有效,即打开显示屏时。 但是当应用程序没有运行并且显示器关闭时,没有任何事情发生同样的情况,当显示器打开并且用户进入信标区域时。

当用户进入/退出该区域时,是否可以启动应用程序,即使显示器处于关闭或打开状态时,不仅仅是在电话被唤醒时?

我查看了这个iBeacon Notification when the app is not running链接,这表明它是可能的。我正在监视iBeacon但无法获得预期的行为。我错过了什么?

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

是的,您可以在后台进入某个地区时收到通知。只要:

就会发生这种情况
  • 该应用已至少打开一次
  • 用户没有直接杀死应用程序(通过退出进程,而不仅仅是解雇它)

现在了解它的表现有点微不足道。

在我的公司,我们已经对此进行了大量研究。事实上,我的一位同事写了一篇关于这种行为的博文:iBeacon Monitoring in the Background and Foreground

出乎意料的是在后台获取didEnterRegion需要多长时间:

Condition                                      Max time to detect a region change
--------------------------------------------   ----------------------------------
Phone awakened,notifyEntryStateOnDisplay=YES   1 second
Phone awakened, notifyEntryStateOnDisplay=NO   NEVER
UIBackgroundModes=location ON                  up to 15 minutes
UIBackgroundModes=location OFF                 up to 15 minutes

答案 1 :(得分:0)

您可以在CLBeaconRegion上设置一些属性,以便在您的应用收到有关该区域相关用户位置更改的通知时进行更改:

  • notifyOnEntry - 当用户进入区域
  • 时,系统会通过locationManager:didEnterRegion:通知您
  • notifyOnExit - 当用户退出该区域时,系统会通过locationManager:didExitRegion:通知您
  • notifyEntryStateOnDisplay - 当用户唤醒设备的屏幕并且他们在区域内时,您会收到locationManager:didDetermineState:forRegion:的通知

请注意,您必须在再次调用didEnterRegion:之前完全退出某个区域,有时可能需要一分钟或更长时间才能让设备正确注册您已离开某个区域。因为信标可以播放长达30或50米(或者更多),你要么必须远离信标离开一个区域或以其他方式关闭信标,等待一分钟左右,然后返回触发改变。