使用Core Bluetooth访问iOS 8上的自定义BLE设备的原始广告数据

时间:2014-11-16 12:34:39

标签: ios objective-c bluetooth core-bluetooth ibeacon

我想询问是否可以从 Core Bluetooth API 中使用Raspberry Pi构建的自定义BLE设备访问原始广告数据?< / p>

用例是将广播不断更改的数据从Raspberry Pi广播到附近的多个iOS设备,并在iOS应用中使用它们。请参阅this article中的拓扑描述。

我已经发现iBeacon广告已从Core Bluetooth API中过滤掉,并且只能从Core Location API访问,这需要了解UUID。由于数据不断变化,自定义iBeacon无论如何都不适用于此特定用例。但我不确定我是否可以通过Core Bluetooth实现这一目标?

2 个答案:

答案 0 :(得分:3)

如果更改Raspberry Pi以传输非iBeacon格式,则可以执行所需操作。 CoreBluetooth仅过滤掉广告的原始字节(如果它们是iBeacon广告)。见这里:Obtaining Bluetooth LE scan response data with iOS

一个简单的解决方案是将您的iBeacon广告更改为开源AltBeacon广告。 CoreLocation将不再提取,但CoreBluetooth会。

以下是您在NSDictionary CoreBluetooth回调中的advertisementData centralManager:didDiscoverPeripheral:advertisementData:RSSI:中获得的内容的示例。此示例是检测到AltBeacon广告(开源信标标准)的结果,标识为2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 2:

{
    kCBAdvDataIsConnectable = 0;
    kCBAdvDataManufacturerData = <1801beac 2f234454 cf6d4a0f adf2f491 1ba9ffa6 00010002 be00>;
}

您可以通过查看AltBeacon规范here.来了解如何解码上述字节。请注意,以上是iOS8上已检测到的广告的NSDictionary的实际内容,这些内容已打印到控制台使用NSLog语句。

答案 1 :(得分:2)

快速回答是“没有直接的方法”。

<强>为什么:
因为CoreBluetooth会过滤除kCBAdvDataServiceUUIDskCBAdvDataLocalName以外的广告数据,所以现在可以通过广告将自定义数据从外围设备传递到中心。

我们如何解决方法:
周边
1)保留一些自定义服务(让我们将其命名为'BeaconService') 2)BeaconService包含Beacon的UUID,主要,次要特征 3)通告BeaconService UUID(通过kCBAdvDataServiceUUIDs密钥)。

<强> 中部
1)扫描具有BeaconService UUID的外围设备 2)发现外围设备排队 3)连接打开到排队的外围设备,并从BeaconService读取iBeacon信息 4)读取值可用于启动CoreLocation信标监视/测距。

通过这种方式,您可以建立从CoreBluetooth到CoreLocation的桥接。