繁体   English   中英

检测设备是否可以传输 iBeacons - Core Bluetooth

[英]Detecting if device can transmit iBeacons - Core Bluetooth

我正在尝试获取有关我的设备可以传输的信标类型的信息。 我在检测 iBeacons 时遇到问题。 我可以通过 Core Location 框架检测到这种类型,该框架将返回 CLBeacon 对象。 另一方面,我发现使用 Core Bluetooth 的设备。 CLBBeacon 和 Core Bluetooth 给出了已建立的项目 UUID。 但是有不同的 UUID,我看不到映射这些值的方法。

我的下一个想法是根据函数返回的广告数据检测 iBeacon

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 

正如我所读到的,iBeacons 会阻止制造数据和服务数据。 此外,无法与 iBeacon 设备连接。 所以我的问题是:

根据上述信息(没有制造数据,没有服务数据,设备无法连接)返回该设备可以传输 iBeacon 是个好主意吗?

或者也许有不同的方法来检测 iBeacons? 正如我上面写的,我正在尝试使用核心位置,但我不知道从核心位置和核心蓝牙信息(例如通过 UUID)映射值

不幸的是,CoreBluetooth 和 CoreLocation 检测到的设备之间没有共享标识符。 Apple 已竭尽全力使两个来源的信息无法相关联:

  • 对于与 iBeacon 格式匹配的任何广告,Apple 会阻止读取 CoreBluetooth 检测到的广告中的制造商数据字段。 (即使它在 Linux、Windows 和 Android 蓝牙堆栈等其他平台上是可读的,它实际上也会清除数据的内容。)

  • Apple 为 CoreBluetooth 设备标识符生成一个伪随机 UUID,它在内部映射到一个只有操作系统知道的硬件 MAC 地址。 此蓝牙设备标识符在与 iBeacon 一起使用的 ProximityUUID 处具有相同类型的 UUID 格式,但对于同一物理设备,两者永远不会匹配。

在这里阅读我的博客文章: http : //www.davidgyoungtech.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons

您根本无法假设设备是 Beacon,因为您可以使用 CoreBluetooth 看到它,并且它会发出没有数据的制造商广告,并且无法连接。 这可能是真的,但也可能不是。 有很多蓝牙设备不是信标,而是以这种方式运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM