通过 iBeacon Monitoring & Ranging 与 CoreBluetooth scanForPeripheralsWithServices 检测信标

Detecting beacons via iBeacon Monitoring & Ranging vs CoreBluetooth scanForPeripheralsWithServices

关于 iOS 对想要扫描 BLE beacons\peripherals 的应用程序施加的限制存在很多混淆。 在阅读了几篇博客和 Stack Overflow 的回答后,我想看看我是否正确理解了所有问题。如果有任何我误解或遗漏的地方,请纠正我。我只参考 iOS 7 及以上,并且专注于检测而不是连接(您可以使用 iBeacon Monitoring & Ranging API 连接到 CLBeacon 吗?)。

信标的选项很明确——使用通用 BLE 外围设备或使用在 iBeacon format 中发布广告的 BLE 外围设备(此外,非标准外围设备可以在 adv 中以 iBeacon 格式发布广告-数据包和扫描响应数据包中的不同格式)。

一般限制

运行 在前台 - 限制较少的用例:

运行 在后台 - 更受限制的用例:

运行 应用被杀死后

有没有人对这些限制有更多经验? scanForPeripheralsWithServices 在某些用例中可以用作 iBeacon 监控的更好替代方案吗?

谢谢!

您的描述基本正确。仅需澄清两点:

  • 20 个区域限制是每个设备 而不是 ,它是特定于应用程序的。无论其他应用程序在移动设备上做什么,您的应用程序仍被允许监控多达 20 个区域iOS。也就是说,可能存在特定于设备的硬件限制,即在硬件协助下可以在后台监控多少区域。这些限制没有记录。如果您超过这些未记录的限制,则可能需要更长的时间才能在后台检测到信标。 (尽管如此,无论如何,无法 OS 保证检测何时到来。)

  • 您无法使用监控和测距 API 连接到 CLBeacon。这些 API 仅适用于无连接的 BLE 广告数据包。

是的,可以使用 scanForPeripheralsWithServices 作为替代。这就是 Gimbal 信标为实施专有系统所做的事情。然而,就背景检测时间和可靠性而言,存在真正的缺点。