我需要监控全球约400个地区(半径1-3公里的首都地区)。但是,每个应用程序的受监控区域都有限制,因此我无法在开始时注册它们。 Apple文档中没有具体的最大区域数,但有些人说区域的安全最大数量是10个区域(here)。
Apple docs声明“为了解决这些限制,您应该考虑仅在用户附近注册那些区域。随着用户位置的变化,您可以删除现在更远的区域并添加用户路径上的区域”。那么,问题是如何以及何时管理这些地区?
使用区域监控时,主要的回调是didEnterRegion和didExitRegion。所以在开始时,我认为每次用户进入某个区域时,我都会收到一条通知,我可以删除旧区域,查找相关的最近10个区域并注册它们。但问题会发生在用户不会进入最近区域但会移动距离更近的情况下(例如飞机从某个地方飞到地球的对面),我永远不会改变更新受监视区域的列表,因为永远不会调用didEnterRegion。
要解决这个问题,我正在考虑添加对重大更改的监控,因为每当其中一个三角形单元塔发生变化时,我都会收到回调(通知)。因此,我可以使用这些通知非常频繁地更新受监控区域的列表。就是这样,你对此有何看法?
答案 0 :(得分:3)
首先想到的是,如果您有十个区域可供使用,您真正想要做的是在9个最近的感兴趣区域设置通知,然后设置一个不是实际区域的区域,而是一个元区域 - 当前位置周围的区域。这样,当用户离开当前位置时,您更有可能收到didExitRegion回调。此时,您取消注册所有10个区域并重复该过程。 (即根据新的当前位置重新注册9 +元区域。)
正如您所提议的那样,在更新您的十个区域时尽可能多地解决问题也是有意义的,所以当然,添加一个重要的更改通知似乎是一个不错的方法。
另一种选择,虽然可能不赞成,但是告诉操作系统您的应用程序是VOIP应用程序。这允许您注册定期唤醒。您可以使用这些来更新您的区域。我不知道Apple在多大程度上审核了该设施的使用,但这是值得尝试的。