iOS 蓝牙开发获取kCBAdvDataManufacturerData不一致的问题

出现问题的部分逻辑非常的简单,我们的蓝牙产品在广播包中会以某个字节标识自己的类型,扫描到设备以后代理方法中会以字典的形式提供给我们。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
        id data = advertisementData[@"kCBAdvDataManufacturerData"];
}

要解决问题之前必须要声明一点,在蓝牙的标准协议当中,设备的发现流程如下。

iOS 蓝牙开发获取kCBAdvDataManufacturerData不一致的问题_第1张图片
发现流程

按照协议,第15个字节就是设备的类型。但是提供给客户之后,发现在iOS 8上设备类型获取错误,iOS 9及以后版本没有问题。出现这个情况的原因在于,iOS 8及以前kCBAdvDataManufacturerData这个数据提供的是scan response (SCAN_RSP),但是iOS 9及以后会把advertising packet (ADV_IND)scan response (SCAN_RSP)两部分合并在一起提供给了我们。所以不同版本的情况下我们获取kCBAdvDataManufacturerData会出现不同。

官方相关问答

你可能感兴趣的:(iOS 蓝牙开发获取kCBAdvDataManufacturerData不一致的问题)