【问题标题】:Does the location manager's limit of 20 regions mean 20 total geofence AND beacon regions?位置管理器对 20 个区域的限制是否意味着 20 个地理围栏和信标区域?
【发布时间】:2016-07-10 18:57:02
【问题描述】:

恐怕我知道这个问题的答案。

Apple 的 startMonitoringForRegion 方法的位置管理器文档说您一次最多可以监控 20 个区域。

我有一个大量使用地理围栏区域和信标区域的客户端应用程序。

我曾假设地理围栏区域和信标区域分别有 20 个区域限制,但我担心这两种类型的限制实际上是 20 个区域。

有人可以根据实际经验证实我的恐惧吗?

【问题讨论】:

    标签: ios core-location ibeacon clcircularregion


    【解决方案1】:

    是的,20 个区域限制是 CoreLocation 允许您监控 CLBeaconRegions 和 CLCircularRegions(地理围栏)的最大值。当 iOS 7 添加信标支持时,由于 API 的定义方式,信标区域继承了地理围栏的相同限制。正如您所怀疑的,该限制适用于您要监控的任何类型的区域。因此,您可以监控 10 个CLBeaconRegions 和 10 个CLCircularRegions,但每种类型的组合不超过 20 个。

    【讨论】:

    • 叹息。我以前很怕那个。你知道为什么 Apple 规定了 20 个区域的限制吗?
    • 我不知道为什么苹果恰好选择了 20 作为限制,但有些限制似乎是合理的。应用程序的地理围栏越多,每次位置更改时操作系统必须做的工作就越多,以查看是否被绊倒。 20 和 40 之间的差异可能很小,但想象一个有 1000 的应用程序!对于信标,蓝牙芯片上的可用插槽数量有限,可用于硬件过滤以进行快速信标检测。有证据表明,在某些 iOS 设备上,系统范围的限制为 30 个插槽,这意味着两个应用程序会用完所有这些插槽,每个插槽有 20 个信标区域。
    • @davidgyoung 此硬件限制 30 仅适用于同时可检测的信标。想象一下,你在一家商店里,附近有 30 个信标——这就是这个限制。这是硬(软件)限制。实际上没有软件(软件)限制。想一想 - 首先识别每个 Beacon,然后然后对照设备上注册的Beacon 检查找到的ID。因此,在设备端,只有已注册的 Beacon ID 的索引列表,必须通过它进行搜索。这同样适用于地理围栏。
    • 嗨,我不知道这是否最近发生了变化,但我相信最大值是 15,如果您尝试添加另一个,它不会自动释放最旧的,而是无法创建一个新的监控区域。
    • @Holger,是的,确实在达到限制后会报错,不能再添加了。但是,我不相信限制已从 20 更改。通过计算 locationManager.monitoredRegions 上已存在的数量,检查您的应用程序启动时是否尚未设置一些设置
    【解决方案2】:

    CLRegion 的每种类型限制为 20 个。这意味着您可以监控 20 个CLCircularRegion 和 20 个CLBeaconRegion

    这没有记录,但我做了一些测试并添加了 20 多个 CLBeaconRegion 和 20 多个 CLCircularRegion。结果是self.locationManager.monitoredRegions.count40 有20 个monitoredRegions 类型为CLCircularRegion 和另外20 个类型为CLBeaconRegion

    一旦达到CLRegion 的每种类型的限制并尝试监视(该类型的)新区域,它们就会被忽略,并使用kCLErrorRegionMonitoringFailure 错误代码调用locationManager:monitoringDidFailForRegion:withError:

    【讨论】:

    • 您的回答与我的经验不符。发布此问题后,我尝试了一下,发现 David Young 报告的内容 - 您的应用最多只能监控 20 个区域,而不是每种类型的 20 个。如果您尝试添加超过 20 个,其中一些会被忽略。
    • @DuncanC 我在 iOS 9 上测试了这个,结果就是这样。确保您在设备上进行测试,因为模拟器不支持监控CLBeaconRegion
    • 当您尝试监控超过 20 个组合区域时不会出现错误,但超过 20 个的区域会被忽略。相反,如果您尝试添加超过 20 个单一类型的区域,则会出现错误。
    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2014-10-12
    • 2017-08-09
    • 2014-05-19
    • 1970-01-01
    相关资源
    最近更新 更多