在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_SPECIFIC ( 0xFF )请记住,在制造商特定数据中 ,前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/