0

根据 Radius Network [1] 的一项测试,iOS 设备在监控模式下最多只能检测到 30 个信标区域。但是为什么在 Android 上仍然可以定义(几乎)无限数量的信标区域?

感谢您的澄清。

[1] http://developer.radiusnetworks.com/2015/04/21/max-beacon-regions-ios.html

4

2 回答 2

2

为了澄清,iOS实际上有两个限制:

  • 每个 iOS 应用程序最多可以监控 20 个定义CLBeaconRegion的 s。此限制是每个应用程序最多 20 个地理围栏的保留。CLRegion由于 Apple 扩展了相同的 API,因此信标继承了每个应用 20 秒的限制,因为该CLBeaconRegion对象是CLRegion. Apple 决定对信标保持同样的限制可能还有其他原因,但这就是它的起源。

  • 设备上注册的前 30 个 CLBeaconRegions(跨所有应用程序)得到加速检测。 这是因为蓝牙芯片的硬件插槽有限,用于 BLE 数据包的硬件匹配。如果所有这些插槽都被占用,则检测会退回到定期软件扫描,这会更慢。

在 Android 上,这些确切限制不适用,但确实存在其他限制。以下限制适用于 Android 信标库:

  • 您可以监控的区域数量没有限制。 但是,由于匹配最终是在软件中完成的,因此监控极端数量的区域(数百或数千)会降低您的应用程序的速度并可能导致性能问题。

  • 硬件加速过滤器仅适用于 Android 5.0+(如果在手机硬件上可用)。它们适用于信标类型,而不是特定的信标区域。因此,虽然加速硬件检测没有区域限制,但如果多个信标同时可见,您的应用程序只会对第一个可见的信标进行加速检测。随后的检测会退回到较慢的定期软件扫描,例如在 iOS 上,直到所有信标消失。

于 2016-03-14T12:08:58.610 回答
1

iOS 可以监控的实际上是 20 个 Beacon 区域,这只是 Apple 对 CoreLocation 框架的限制。

原因没有官方解释,但我的猜测是苹果不希望开发人员监控大量/无限数量的区域,以避免滥用该功能并对设备的电池寿命产生负面影响。

于 2016-03-13T15:41:40.057 回答