iBeacon在iOS 7.1中如何支持真正改变?

时间:2014-03-12 20:58:18

标签: ibeacon ios7.1

我在网上看到了新发布的iOS 7.1的iBeacon支持。

具体做法是:

  1. 系统应该仍然通知您的应用 didEnterRegion / didExitRegion事件,即使用户明确 杀死你的应用程序。
  2. didEnterRegion / didExitRegion通知 应该从背景和/或设备更快 锁定。
  3. 我无法通过自己的测试确认这些声明中的任何一个。事实上,我似乎可能从锁定的设备获得didEnterRegion / didExitRegion通知。 (更准确地说,我似乎得到了didEnterRegion通知,但没有得到didExitRegion通知)。这可能是因为Apple让我删除了我的info.plist中的BLE背景模式条目 - 我不完全确定。我还在努力解决这个问题。

5 个答案:

答案 0 :(得分:20)

我最初设置我的测试时遇到了麻烦,但在iOS 4和iPhone 5s型号上杀死iOS 7.1中的应用后,我目睹了背景区域输入回调。有关测试详细信息和重现说明,请参阅下面的注释。

我还在iPhone 4S上测试了背景检测时间,我仍然看到iOS 7.1上的延迟时间为15分钟。 My full test results and methodology are described here.

最后,我还对"准确度的波动进行了一些测试。 (升级到iOS 7.1之前和之后,同一设备上的距离(米))。我没有看到估计噪音的明显差异。下图显示了升级前后的结果,iBeacon距离0.5米60秒,然后移动到3米外60秒。在这两种情况下,发射器都是经过适当校准的iPhone 4S,配备iOS 7.1,接收器是iPhone 5S。

iOS 7.0.6

iOS 7.0.6预计距离

iOS 7.1

iOS 7.1预计距离

答案 1 :(得分:1)

正如在互联网上流传的几篇文章中所提到的,即使您将应用程序从多任务视图中移开,也可以使用信标感应功能。但是在我的实验中,区域进入/退出事件不会直接调用 didDetermineState:(可能是因为我没有使用AppDelegate来启动任何信标感应,而是基于UI事件触发监控)。相反,如果您已注册后台位置更新,则会在参数launchOptions集中使用密钥 UIApplicationLaunchOptionsLocationKey 的值调用AppDelegate的 didFinishLaunchingWithOptions :方法。

你可以像这样做一个简单的检查来测试这是否确实是一个位置更新,它已经将你的应用程序带到后台执行某项任务。

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey])

然后,您可以再次注册受监控的区域或立即开始测距。

P.S。 CLLocationManager在应用程序恢复时保留以前监视的区域,但是没有使用相同的UUID和标识再次开始监视,您将无法在CLLocationManagerDelegate中获得进入/退出区域事件(这使得您恢复生机)

答案 2 :(得分:0)

大卫在这方面做了一些很棒的工作,所以我小心翼翼地写这篇文章......但是在我的测试中我看到了与他完全不同的东西。

我正在使用两部手机:运行iOS 7.1(11D167)的iPhone 4S和运行iOS 7.0.6(11B651)的iPhone 5S。我的iBeacons是由Bluecats(www.bluecats.com)制造和销售的,虽然我还没有使用他们的SDK(即我只是使用CoreLocation),我认为制造商没有太大的区别。

当应用程序在前台运行时以及在后台运行时,我在两台设备上的响应时间大约为1-2秒。唯一的区别是当我从应用程序切换器中删除应用程序时:iOS 7.0.6从不响应(或者可能会在15分钟内完成),但iOS 7.1会在大致相同的时间内响应。当我说“回应”时,我的意思是CLLocationManager的locationManager:didDetermineState:forRegion:委托由iOS调用。

我正在测试,实际上是手持电话在办公室里徘徊,所以我实际上是在移动范围内。奇怪的是(?),在我的早期测试中,我坐在办公桌前,通过移除和重新插入电池来模拟移入和移出范围,我看到响应时间慢得多。也许这是差异的一部分?

答案 3 :(得分:0)

在我的测试中,我看到一个灯塔的存在不会被应用程序注意长达15分钟,但我发现了一些有趣的东西。我使用RedBearLabs mini BTLE传感器作为ibeacons和他们的应用来编程信标,http://redbearlab.com/ibeacon/http://redbearlab.com/s/MiniBeacon_v1.zip),似乎有一些东西可以立即开始扫描/更新信标。如果我启动一个灯塔,并在我的应用程序中它被忽视,通过启动然后退出MiniBeacon应用程序我的应用程序立即通知我有新的信标。进入或退出时的结果相同。他们的应用程序使用CBCentralManager,我的应用程序没有,所以CBCentralManager和CLBeaconRegion之间的混合可能是要走的路?我想CLBeaconRegion启动/重新启动蓝牙无线电,所以也许这就是原因。只是抓住它,希望有更完整理解的人可以帮助解决这个问题。

由于

答案 4 :(得分:0)

我的测试还会重现15分钟,以便在iOS7.1.1上我的应用处于后台模式时开始扫描。有点好奇,我看到很多来自不同公司的YouTube视频显示应用程序一接近它们的信标就从后台模式中唤醒。这是销售技巧吗?