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

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

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

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

发现流程

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

官方相关问答

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Guide to BluetoothSecurity原文 本出版物可免费从以下网址获得:https://doi.o...
    公子小水阅读 12,626评论 0 6
  • 你终于秀恩爱了。虽然你没有让她露脸,但是明显的看到你的旁边是个女的,而且这照片还是她拍的,背景是坐在动车上,你们坐...
    傻妞傻乎乎阅读 1,540评论 0 0
  • 摆渡的小船上挤满了游客,洋溢着难掩的兴奋和期待。尽管舷外寒风凛冽,船内的气氛却如同暖春。我安静地站在角落,凝视着雾...
    棠日宸阅读 3,517评论 1 4
  • 在微博上看到一个小段子:他对她说我喜欢你,顿了顿,脚底下的土地,她给了他一个白眼,他又说我喜欢你,顿了顿,身后的大...
    琉鹿Yolo阅读 3,114评论 0 1
  • 1 我喜欢聪明人,又怕人年轻时就太聪明。 我见过一个年轻人,少见的聪明,天赋是很惊人的,学习能力也超强。很多职场人...
    秋叶大叔阅读 5,292评论 0 6