同时使用 CoreLocation 和 CoreBluetooth 扫描信标

Using CoreLocation and CoreBluetooth scan beacons at the same time

我负责开发一个应用程序,我需要在其中扫描信标,到目前为止,仅支持 iBeacon 信标就足够了,为了做到这一点,我使用 CoreLocation 扫描和检索有效信标的数据很好。

现在需要增加扫描Eddystone信标的支持;但 CoreLocation 不支持这种类型的信标。因此,我必须使用 CoreBluetooth 来扫描和检索来自 Eddystone 信标的数据,请参阅来自@davidgyoung 的非常有用的 post 以进一步了解。

因此,由于 CoreLocation 和 CoreBluetooth 使用蓝牙,我开始考虑要遵循的最佳实践以尽可能好地扫描两种信标类型,我想出了以下方法:

如果您想扫描 iOS 上的 iBeacon 和其他信标类型,您必须同时使用 CoreLocation 和 CoreBluetooth。他们合作得很好。

重要的是要注意无法使用 CoreBluetooth 扫描 iBeacon,因为 iOS 阻止访问与 iBeacon 格式匹配的任何数据包的原始字节返回一个空的制造商数据 NSData 对象。

要查看它们一起正常工作的示例,请查看我的 Locate Beacon 应用 iOS,它可以扫描 iBeacon(使用 CoreLocation)以及使用 CoreBluetooth 的 Eddystone 和 AltBeacon。打开附近的两种信标类型,应用程序会同时检测到这两种信标。事实上,AppStore 上的示例屏幕截图显示了这一点。

虽然该应用程序的代码不是开源的,但它如何扫描 AltBeacon 和 CoreBluetooth 的基础知识在 iOS Beacon Tools 项目中是开源的。