使用带有 iOS 的通用 BLE 信标?

Using generic BLE beacons with iOS?

我想创建一个不遵循 Apple 的 iBeacon 规范的 BLE Beacon。原因是 "beacon" 将是一个 arduino 设备,应用程序也应该能够与之通信以指示它做事。 iOS 支持吗?我听说 iOS 8 会锁定通过蓝牙的通用设备广告。

提前致谢。

是的,您可以使用 CoreBluetooth API 执行此操作,但有一些限制,具体取决于您使用的蓝牙 LE 广告类型。

1。制造商广告

您可以使用 CoreBluetooth 读取制造商广告的所有字节(最多 24 个字节),但 仅当应用程序位于前台时 。在后台,您不会收到任何回调。这通常与第二个 iBeacon 广告配对,后者在 iOS 的后台唤醒应用程序。有关此类广告的示例,请参阅 AltBeacon specification.

2。 GATT 服务广告

即使应用程序在后台,也会通过 CoreBluetooth 向应用程序发送 GATT 服务广告检测,前提是该应用程序专门寻找信标的 GATT 服务 UUID。这种方法的缺点是数据有效负载通常仅限于 2 字节服务 UUID 之后的 18 字节。

其他详情

对于这两种广告类型,您都可以使用GATT连接到设备,并读写数据。但是请注意,一旦连接,设备通常会停止作为信标进行广告。

以上两个都按照 iOS 8 所述工作。很难预测未来,但 Apple 似乎不太可能锁定上述两个用例,因为它们广泛用于蓝牙 LE Beacons 以外的应用程序。

您可以在this blog post中看到阅读这些广告的基本步骤。虽然 post 专门针对 Apple 如何过滤 iBeacon 广告,但如果您制作自己的自定义制造商广告,它将允许您读取 post.

中描述的字节。

为了完整起见,Android 设备在前台和后台都可以获取上述两种广告类型。