繁体   English   中英

在iOS中获取BLE的广告数据

[英]Get advertisement data for BLE in iOS

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

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

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

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

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

编辑:为了澄清,您可以读取非iBeacon广告的原始制造商数据字节或服务数据字节。 只有具有由隐藏他们的制造商的数据字节iBeacon显示广告CoreLocation 请参阅此处: 使用iOS获取蓝牙LE扫描响应数据

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

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

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

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

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

2)在iOS中

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

您可以使用键在advertiseData词典中查看制造商特定数据:

CBAdvertisementDataManufacturerDataKey

3)如果您希望在您的应用程序中收到外围设备发送到iOS的每个广告包的回叫通知,请记住将扫描选项更改为YES。 看看这篇文章: 核心蓝牙 - 范围内设备的不断RSSI更新

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM