【问题标题】:Detecting if device can transmit iBeacons - Core Bluetooth检测设备是否可以传输 iBeacons - 核心蓝牙
【发布时间】:2020-05-27 03:40:24
【问题描述】:

我正在尝试获取有关我的设备可以传输的信标类型的信息。我在检测 iBeacons 时遇到问题。我可以通过将返回 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)

【问题讨论】:

    标签: ios iot core-bluetooth ibeacon


    【解决方案1】:

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

    • 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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 2013-02-19
      • 2021-12-26
      • 2014-01-29
      相关资源
      最近更新 更多