是否可以使用CoreBluetooth而不是iBeacons来测量背景中的距离?

问题描述 投票:1回答:1

我正在开发一个项目,其中固定的iPad将充当BLE外围设备,而iPhone将充当BLE中心。随着iPhone进入iPad的几米之内,iPhone将会有所作为。 iPhone需要能够在后台运行或锁定。

我一直在使用CoreLocation库来创建iBeacon。使用测距方法,CoreLocation允许我找到信标的准确性和接近度。但是,根据我的发现,CoreLocation不允许进行背景测距。我还发现,对信标区域的监控可以触发进入/退出事件,这允许我暂时(~5秒)启动应用程序,然后确定准确度和接近度的范围。但是,这个解决方案无法正常工作,因为iPad的信标范围非常大,并且中央设备会在设备达到我的目标范围(外围设备的几米)之前很久就会触发进入/退出事件。

因此,我一直在研究CoreBluetooth库作为CoreLocation / iBeacons的替代品。我知道使用CoreBluetooth,我必须根据RSSI手动计算距离。

我的第一个问题是,Are my assumptions correct? Would CoreBluetooth be a good alternative to use for this project?

我的第二个问题是,Can the iPhone (central) determine the distance between itself and the iPad (peripheral) while locked or running in the background?

提前致谢!

ios swift core-location ibeacon core-bluetooth
1个回答
1
投票

CoreBluteooth通常是用于检测信标的CoreLocation的不良替代品,原因如下:

  1. 您无法使用Core Bluetooth检测iBeacon传输。 Apple明确阻止您这样做,如果广告数据与iBeacon匹配,则在CoreBluetooth API中消除广告数据。
  2. 在后台使用CoreBluetooth检测其他信标格式的能力很差。制造商广告(如AltBeacon)几乎完全在后台被阻止(您只能检测到一个数据包!)。服务广告(如Eddystone)可在后台检测到,但回调相对于CoreLocation的回调速度非常慢。
  3. 许多其他CoreLocation功能缺失,例如应用程序自动启动信标检测,以及硬件过滤器,以便在您的应用程序暂停时获得快速后台检测。

实际上,您可以使用CoreLocation以几种不同的方式在后台使用信标范围:

  1. 如您所见,在每个区域进入/退出过渡后10秒。
  2. 如果您请求额外的后台运行时间,则在每个区域进入/退出转换后最多180秒。
  3. 无限期地,如果您将Info.plist设置为具有位置后台模式,并注册定期位置更新(例如,log / lon位置更新)

上面的选项2和3可用于CoreLocation但不适用于CoreBluetooth。要使用选项3进入AppStore,您必须说服Apple审阅者您的应用程序正在提供合法的后台位置跟踪功能。

最后,您可以根据CLBeacon#rssi属性进行自己的距离计算。最好将其平均超过20-30秒以减少噪音,并且您将以某种方式需要您自己的参考值来预期RSSI在1米处,因为嵌入在信标帧中的那个不能被第三方软件读取。但你可能不需要这样做。如果你只是用你的应用程序瞄准iPad,你可以简单地调整信标内的校准常数与iPad的预期1米距离RSSI,你应该得到更准确的距离测量。

在某些情况下,尽管有上述缺点,您仍然希望使用CoreBluetooth。出于这个原因,我建立了this repo

© www.soinside.com 2019 - 2024. All rights reserved.