iOS 7.1 对 iBeacon 的支持有啥真正的改变?
Posted
技术标签:
【中文标题】iOS 7.1 对 iBeacon 的支持有啥真正的改变?【英文标题】:How is iBeacon support REALLY changed in iOS 7.1?iOS 7.1 对 iBeacon 的支持有什么真正的改变? 【发布时间】:2014-03-12 20:58:17 【问题描述】:我在网上看到了新发布的 ios 7.1 支持 iBeacon 的说法。
具体来说:
-
系统应该仍会通知您的应用
didEnterRegion/didExitRegion 事件,即使用户明确
杀死你的应用程序。
didEnterRegion/didExitRegion 通知是
应该从后台和/或使用设备更快
锁定。
我无法通过我自己的测试来确认这些说法。事实上,我似乎不太可能从锁定的设备收到 didEnterRegion/didExitRegion 通知。 (更准确地说,我似乎收到了 didEnterRegion 通知,但没有收到 didExitRegion 通知)。这可能是因为 Apple 让我删除了 info.plist 中的 BLE 后台模式条目——我不完全确定。我仍在努力解决这个问题。
【问题讨论】:
【参考方案1】:一开始我在设置测试时遇到了麻烦,但我在 iPhone 4s 和 iPhone 5s 型号上都看到了在 iOS 7.1 中杀死一个应用程序后后台区域进入回调。有关测试详细信息和重现说明,请参阅下面的 cmets。
我还在 iPhone 4S 上测试了背景检测时间,但在 iOS 7.1 上我仍然看到 15 分钟的延迟。 My full test results and methodology are described here.
最后,我还对升级到iOS 7.1前后在同一设备上的“准确度”(距离单位米)测量的波动做了一些测试。我没有看到估计的噪声有明显差异。下图显示了升级前后的结果,iBeacon 在 0.5 米外持续 60 秒,然后移动到 3 米外持续 60 秒。在这两种情况下,发射器都是经过适当校准的带有 iOS 7.1 的 iPhone 4S,而接收器是 iPhone 5S。
iOS 7.0.6 估计距离
iOS 7.1 估计距离
【讨论】:
感谢大卫称重。我希望收到你的来信。 (已投票。)我暂时不会接受答案,因为我想听取尽可能多的人的意见,但您的答案一如既往。 P.S.我看到你在华盛顿特区。下落?我在大瀑布/斯特林。 我们的 Radius Networks 办事处位于华盛顿特区的乔治敦。也许不久我们就会在物质世界相遇。 确实如此。你参加过 MoDev 的棕色袋子午餐会议吗?几个月前我参加了一个关于 BLE 的活动。 我刚刚编辑了我的答案,以确认我在杀死应用程序后 AM 收到区域条目回调。【参考方案2】:正如在互联网上流传的几篇文章中提到的那样,即使您将应用程序从多任务视图中滑开,也可以使用信标感应。但是在我的实验中,区域进入/退出事件不会直接调用 didDetermineState: (可能是因为我没有使用 AppDelegate 来启动任何信标感应,而是根据 UI 事件触发监控)。相反,如果您已注册后台位置更新,您的 AppDelegate 的 didFinishLaunchingWithOptions: 方法将使用参数 launchOptions 集中的键 UIApplicationLaunchOptionsLocationKey 的值调用。
您可以像这样进行简单的检查,以测试这是否确实是位置更新,已将您的应用购买到后台以执行某些任务。
if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey])
然后您可以再次注册您的监控区域或立即开始测距。
附注CLLocationManager 会在应用恢复时保留您之前监控的区域,但如果不使用相同的 UUID 和身份再次开始监控,您将不会在 CLLocationManagerDelegate 中获得进入/退出区域事件(这使您恢复生机)
【讨论】:
【参考方案3】:大卫在这方面做了一些出色的工作,所以我在写这篇文章时很谨慎……但我在测试中看到了与他完全不同的东西。
我正在使用两部手机:一部运行 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 调用。
我实际上是通过手持手机在办公室里闲逛来进行测试的,所以我实际上是在移动范围内和范围之外。奇怪的是(?),在我早期的测试中,当我坐在办公桌前,通过移除和重新插入电池来模拟移动进出范围时,我发现响应时间要慢得多。也许这是差异的一部分?
【讨论】:
为了确定,“但 iOS 7.1 的响应时间大致相同”是否意味着当应用程序从应用程序切换器终止时 iOS 7.1 会在 1-2 秒后响应?【参考方案4】:在我的测试中,我发现信标的存在长达 15 分钟没有被应用注意到,但我发现了一些有趣的东西。我正在使用 RedBearLabs 迷你 BTLE 传感器作为 ibeacons 及其应用程序来对信标进行编程,http://redbearlab.com/ibeacon/ (http://redbearlab.com/s/MiniBeacon_v1.zip),其中似乎有一些东西可以立即开始扫描/更新信标。如果我启动了一个信标,并且在我的应用程序中它没有被注意到,那么通过启动然后退出 MiniBeacon 应用程序,我的应用程序会立即通知我有新的信标。这与进入或退出时的结果相同。他们的应用程序使用 CBCentralManager,而我的应用程序没有,所以也许 CBCentralManager 和 CLBeaconRegion 之间的混合是要走的路?我想 CLBeaconRegion 启动/重新启动蓝牙无线电,所以也许这就是原因。只是尝试一下,希望有更全面了解的人可以帮助解决这个问题。
谢谢
【讨论】:
我也见过这个。同一设备上的两个应用绝对可以通过直接通过 CoreBluetooth 或通过 iBeacons 进行 BLE 扫描来相互影响。如果一个应用程序在前台进行 BLE 扫描,BLE 扫描结果将立即触发 iBeacon 对后台任何应用程序的检测。我怀疑这就是您在 MiniBeacon 应用程序中看到的。不幸的是,这对于加快后台检测没有用处,因为您无法控制外部应用程序的扫描行为。【参考方案5】:当我的应用在 iOS7.1.1 上处于后台模式时,我的测试还重现了 15 分钟开始扫描。只是有点好奇,我看过很多来自不同公司的 youtube 视频,显示应用程序在接近信标后立即从后台模式中唤醒。这是销售技巧吗?
【讨论】:
我得到了非常复杂的结果。有时我的应用会唤醒并立即收到通知。更多的时候需要几分钟。我只见过几次整整 15 分钟的延迟。我认为这是“最坏情况”的响应时间。 让我分享更多关于我们的测试的内容。1)在前台,就像其他人建议的那样,几乎是即时的; 2)当应用程序不在前台,但另一个应用程序在,大约 15 分钟响应,3)手机在锁定时唤醒,结果似乎不一致,从 1-2 秒到 7-8 秒不等 4)手机不唤醒,结果也不一致,从 4-5 秒到 10+ 不等,比 3) 慢得多。以上是关于iOS 7.1 对 iBeacon 的支持有啥真正的改变?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7.1 是不是破坏了 4S iBeacon 支持? Proximity 在 4S 上始终为 CLProximityUnknown,RSSI 始终为零。请帮忙,在 beta 测试中