我正在寻求创建一个不遵循 Apple iBeacon 规范的 BLE Beacon。原因是“信标”将是一个 arduino 设备,应用程序也应该能够与其通信以指示它执行操作。 iOS 支持此功能吗?我听说过有关 iOS 8 锁定通过蓝牙进行通用设备广告的传言。
提前致谢。
最佳答案
是的,您可以使用 CoreBluetooth
API 执行此操作,但有一些限制,具体取决于您使用的蓝牙 LE 广告类型。
<强>1。制造商广告
您可以使用 CoreBluetooth
读取制造商广告的所有字节(最多 24 个字节),但仅当应用程序位于前台时。在后台,您不会收到任何回调。这通常与第二个 iBeacon 广告配对,在 iOS 的后台唤醒应用程序。有关此类广告的示例,请参阅 AltBeacon specification.
<强>2。 GATT 服务广告
GATT 服务广告检测将通过 CoreBluetooth
发送到应用程序,即使应用程序在后台,前提是该应用程序专门寻找信标的 GATT 服务 UUID。这种方法的缺点是数据有效负载通常仅限于 2 字节服务 UUID 之后的 18 字节。
其他细节
在两种广告类型的情况下,您都可以使用 GATT 连接到设备,并读写数据。但是请注意,一旦连接,设备通常会停止作为信标进行广告。
上述两种情况都与 iOS 8 中描述的一样。很难预测 future ,但 Apple 似乎不太可能锁定上述两种用例,因为除了信标之外,它们还广泛用于蓝牙 LE 应用程序。
您可以在this blog post 中查看阅读这些广告的基本步骤。 .虽然该帖子专门介绍了 Apple 如何过滤掉 iBeacon 广告,但如果您制作自己的自定义制造商广告,它将允许您读取帖子中描述的字节。
为了完整起见,Android 设备在前台和后台均可获取上述两种广告类型。
关于ios - 在 iOS 上使用通用 BLE 信标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29459065/