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

Posted

技术标签:

【中文标题】iBeacons 的 UUID 在不同的设备上是不同的【英文标题】:UUIDs of iBeacons are different on different devices 【发布时间】:2014-06-17 13:47:27 【问题描述】:

我正在开发一个使用 iBeacons 进行室内导航的应用程序,我发现函数 locationManager:rangingBeaconsDidFailForRegion:withError: 的调用率不够高,所以我将添加来自 CoreBluetooth 的 @987654322 的 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 绑定到它的位置,因此这种行为非常破坏功能。

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

【问题讨论】:

与直觉相反,您看不到带有核心蓝牙的 iBeacon UUID,而是看到的是接收电话的蓝牙堆栈分配的备用标识符。 【参考方案1】:

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

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

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

【讨论】:

以上是关于iBeacons 的 UUID 在不同的设备上是不同的的主要内容,如果未能解决你的问题,请参考以下文章

iBeacon 监控具有相同 UUID 和不同主要、次要的多个信标

为啥 CBPeripheral 标识符和 UUID 不同?

iBeacon 设备扫描和检索次要、主要、uuid 参数

是否可以在 iBeacon 应用程序上动态设置 UUID?

从哪里获取已部署 iBeacon 设备的 UUID?

如何在 iOS 7 中使用 iBeacons 获取设备详细信息,如 UUID 或设备名称