ios - iBeacons的UUID在不同设备上是不同的

标签 ios core-bluetooth ibeacon indoor-positioning-system

我正在开发一个使用 iBeacons 进行室内导航的应用程序,我发现调用函数 locationManager:rangingBeaconsDidFailForRegion:withError: 的速率不够高,所以我将添加来自 CoreBluetooth 的 centralManager:didDiscoverPeripheral:advertisementData:RSSI: 的 RSSI 数据。

我发现了一个奇怪的事实:当我用 CoreLocation 监听 iBeacon 并记录外设 ID 时:

- (void)centralManager:(CBCentralManager *)central 
    didDiscoverPeripheral:(CBPeripheral *)peripheral 
    advertisementData:(NSDictionary *)advertisementData 
    RSSI:(NSNumber *)RSSI
{
    NSLog(@"%@, RSSI: %@", peripheral, RSSI);

每个信标在不同设备上使用不同的 UUID 进行报告:

A25804BD-D77A-5004-4C2C-301D996C7367 - my iPhone 5
843F4237-6059-9A5E-AA34-0BD92304BE1F - colleague's iPhone 5
77685805-C253-52BD-B787-8B95308834FB - other colleague's iPad mini

这个想法是将每个信标的 UUID 绑定(bind)到其位置,因此这种行为非常破坏功能。

为什么物理上相同的信标(未关闭/打开)的 UUID 在不同设备上不同?这是预期的行为吗?如果是,我该如何选择退出?

最佳答案

您无法使用CoreBluetooth读取标准iBeacons的标识符。正如 Chris Stratton 在他的评论中所说,CoreBluetooth 为您提供的 UUID 是一个设备 UUID,它是由 iOS 在每个 session 的基础上随机生成的。与 iBeacon ProximityUUID 无关。

有关为何无法使用 CoreBluetooth 读取 iBeacon 标识符的更多详细信息,请参见:http://developer.radiusnetworks.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons.html

确实,您只能通过 locationManager:didRangeBeacons:inRegion: 回调进行 RSSI 测量。这是进行自定义距离估计的真正障碍。在幕后,iOS 可以为以 10Hz 传输的 iBeacons 收集 10 倍的测量数据。您是正确的,您可以使用 CoreBluetooth 获得更多测量结果,但问题是没有可靠的方法来将您使用 CoreBluetooth 看到的蓝牙设备与 iBeacons 相对应您可以使用CoreLocation查看。

关于ios - iBeacons的UUID在不同设备上是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24265569/

相关文章:

ios - Segue 在 Swift 3 中从上到下过渡

ios - 在 iOS 中以编程方式删除配对的蓝牙设备

ios - didEnterRegion 和 startRangingForBeacons 未被调用

ios - 室内导航如何在 iOS 中使用 iBeacon 或 wi-fi 工作?

ios - 更改屏幕时崩溃 - iBeacon iOS

objective-c - 画一个圆代表剩余时间

ios - Xcode 11.2 中的 IconRenderer 警告

ios - 如何以编程方式从 UIView 获取当前的十六进制代码颜色

iOS 应用程序从后台连接低功耗蓝牙服务

ios - 使用一个 CBManager 连接和写入多个外设