可以获得iBeacon的扫描响应

时间:2015-09-04 20:48:17

标签: ios bluetooth ibeacon

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

2015-09-04 16:23:08.231 CentralManager - 用数据[[kCBAdvDataIsConnectable:0]发现外设[CBPeripheral:0x1742e0b80,identifier = 8B63C7F8-44D5-F3E2-AD40-2916A2513BA9,name = DfuTarg,state = disconnected] ]

logging语句打印函数的peripheral和advertisementData参数的值。请注意,打印外围设备的名称(顺便说一句:我碰巧知道DfuTarg是正在扫描的设备的正确名称)。

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

1 个答案:

答案 0 :(得分:1)

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

当设备收到两者时,使用来自初始广告和扫描响应的信息调用didDiscoverPeripheral方法。实质上,您已使用该回调方法访问扫描响应信息。

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

有关详细信息,请参阅here