在iOS中获取BLE的广告数据

时间:2014-04-03 09:22:27

标签: ios objective-c bluetooth-lowenergy ibeacon

我正在创建一个应用程序,它可以获取范围内所有BLE设备的UUID。我已经在Android中运行良好,它给我的广告数据作为字节数组。现在我正试图在iOS中做同样的事情。

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

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

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

2 个答案:

答案 0 :(得分:17)

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

编辑:为了澄清,您可以阅读非iBeacon广告的原始制造商数据字节或服务数据字节。只有iBeacon广告的制造商数据字节被CoreLocation隐藏。见这里:Obtaining Bluetooth LE scan response data with iOS

等效的MacOS CoreLocation方法确实允许这样做,因此它可能是iOS上的故意安全或省电限制。

答案 1 :(得分:14)

基于Apple iOS的官方文档和我的个人经验:

  

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

<强> BUT

如果您打算将信息放入广告包并从iOS应用程序中读取它们而不连接外围设备,则可以这样做。 这里描述如何:

1)在外围设备固件中,您必须在广告数据包中插入制造商特定数据,数据类型为 GAP_ADTYPE_MANUFACTURER_SPECIFIC 0xFF ) 请记住,在制造商特定数据中,前2个八位字节包含公司标识符代码,后跟其他制造商特定数据

2)在iOS

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

您可以使用键:

在advertiseData词典中查看制造商特定数据
CBAdvertisementDataManufacturerDataKey

3)如果您希望在您的应用程序中收到外围设备发送到iOS的每个广告数据包的回叫通知,请记住将扫描选项更改为YES。请看这篇文章:Core Bluetooth - constant RSSI updates of in-range devices

在我的博文中很快就会出现一个教程:http://www.megabri.com/