在iOS中获取BLE的广告数据

我正在创build一个应用程序,获取范围内所有BLE设备的UUID。 我已经得到它在Android中正常工作,它把广告数据作为一个字节数组。 现在我试图在iOS中做同样的事情。

我正在运行扫描,它正在检测设备,并在callback中有一个名为advertisementData的NSDictionary。 但是唯一的信息如下:

kCBAdvDataChannel = 39; kCBAdvDataIsConnectable = 1; kCBAdvDataLocalName = jaalee; kCBAdvDataTxPowerLevel = 0; 

我是否认为我应该得到整个广告包? 如果没有,我怎么能得到它?

不幸的是,iOS不允许您访问原始广告数据。 我写了一篇博客文章来certificate这一点。 虽然这篇文章是关于iBeacons的,但它适用于任何BLE广告。

编辑:澄清,你可以读取非iBeacon广告的原始字节。 只有通过CoreLocation隐藏其字节的iBeacon广告。 请参阅此处: 使用iOS获取Bluetooth LE扫描响应数据

等效的OSX CoreLocation方法确实允许这样做,所以它可能是iOS上有意的安全或节能限制。

根据Apple iOS官方文档和我的个人经验:

是的,iOS不允许您访问RAW广告数据。

如果您的目的是将信息放在广告数据包中,并从iOS应用程序读取而不连接外设,则可以这样做。 这里描述如何:

1)在外设固件中,您必须在广告数据包中插入制造商指定的数据,数据types为GAP_ADTYPE_MANUFACTURER_SPECIFIC0xFF )请记住,在制造商特定数据中 ,前2个八位字节包含公司标识码,其后是制造商特定的附加数据

2)在iOS中

 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 

您可以在广告数据字典中使用以下关键字查看制造商特定数据:

 CBAdvertisementDataManufacturerDataKey 

3)如果你想在你的应用程序接收callback通知每一个外设发送到iOS的广告数据包,记得改变扫描选项为YES。 看看这个post: 核心蓝牙 – 恒定RSSI更新的范围内的设备

在我的博客文章即将推出一个教程: http : //www.megabri.com/