能否获取iBeacon的扫描响应

Can An iBeacon's Scan Response Be Obtained

我正在 iOS 8.4 中使用核心蓝牙 API。我的代码正在与编程为 iBeacon 的 BLE 设备进行交互。这是我执行 CBCentralManager 协议的 didDiscoverPeripheral 回调函数时生成的日志记录语句:

2015-09-04 16:23:08.231 CentralManager - 发现外围设备 [CBPeripheral:0x1742e0b80,标识符 = 8B63C7F8-44D5-F3E2-AD40-2916A2513BA9,名称 = DfuTarg,状态 = 断开] 数据 [ [kCBAdvDataIsConnectable: 0]]

日志语句打印函数的外围参数和广告数据参数的值。注意打印了外设的名称(顺便说一句:我碰巧知道 DfuTarg 是被扫描设备的正确名称)。

iOS 这个名字是从哪里得来的?它不是广告包的一部分。它必须来自辅助扫描请求/扫描响应交换,是吗?我的代码是否可以访问扫描响应?

是的,CBPeripheral 名称来自扫描响应。当检测到广告时,CoreBluetooth 会自动请求扫描响应数据(至少当应用程序在前台时)。

当设备收到初始广告和扫描响应中的信息时,将调用 didDiscoverPeripheral 方法。本质上,您已经在使用该回调方法访问扫描响应信息。

需要注意的重要一点是,当广告被识别为 iBeacon 时,您无法在此回调中访问原始制造商数据。 iOS 将其删除,因此您无法访问它。这适用于广告和扫描响应中存在的制造商数据字节。

有关详细信息,请参阅 here