我正在尝试获取有关我的设备可以传输的信标类型的信息。我在检测iBeacons时遇到问题。我可以通过Core Location框架检测到此类型,该框架将返回CLBeacon对象。另一方面,我发现使用Core Bluetooth的设备。 CLBeacon和Core Bluetooth提供了已创建的项目UUID。但是有不同的UUID,我看不到映射此值的方法。
我的下一个想法是检测iBeacons是否依赖于函数返回的广告数据
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
如我所读,iBeacons会阻止制造的数据和服务数据。而且,无法与iBeacon设备连接。所以我的问题是:
让设备能够传输iBeacon取决于上面的信息(没有制造数据,服务数据,设备不可连接),这是个好主意吗?
也许检测iBeacons的方法有所不同? 如上所述,我正在尝试使用“核心位置”,但我不知道从“核心位置”和“核心蓝牙”信息中映射值(例如通过UUID)
答案 0 :(得分:2)
不幸的是,使用CoreBluetooth和CoreLocation检测到的设备之间没有共享标识符。苹果已经竭尽全力使不可能关联来自两个来源的信息:
Apple阻止读取CoreBluetooth检测到的广告中与iBeacon格式匹配的任何广告中的制造商数据字段。 (即使它在其他平台(例如Linux,Windows和Android蓝牙堆栈)上可读,它实际上也会清空数据的内容。)
Apple为CoreBluetooth设备标识符生成一个伪随机UUID,它在内部将其映射到仅操作系统已知的硬件MAC地址。蓝牙设备标识符在与iBeacon一起使用的ProximityUUID处具有相同的UUID格式,但是对于同一物理设备,两者永远不会匹配。
在此处阅读有关此内容的博客文章:http://www.davidgyoungtech.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons
您根本无法假设设备是信标,因为您可以使用CoreBluetooth看到它,并且它发出没有数据的制造商广告,并且无法连接。可能是正确的,但事实并非如此。有很多没有信标并且以这种方式运行的蓝牙设备。