在基于 UUID 监控 iBeacon 区域时,我何时会收到通知?

When do I get notified when monitoring an iBeacon region based on UUID?

我想构建当它进入具有给定 UUID 的任何 iBeacon 范围时得到通知(即使在后台)。

我知道我可以为我的每个信标监控一个单独的区域,但如果我理解正确,在 iOS,我只能监控 20 个区域。

所以另一种选择是仅根据其 UUID 监视区域,但是我什么时候会收到该区域的 enter/exit 通知?每当我进入或超出具有相同 UUID 的任何信标的范围时,或者仅当我进入第一个信标的范围但超出最后一个信标的范围时?

如果您基于仅包含 ProximityUUID(留下主要和次要零)的通配符区域进行监控,则:

  1. 您只会在第一次检测到第一个信标时收到 一个 didEnter 回调。如果检测到与此通配符区域匹配的第二个、第三个或其他信标,则您没有收到任何监控回调。

  2. 直到 all 与通配符区域匹配的信标消失(这在前台至少需要 30 秒,在后台需要更长的时间),您才会收到任何进一步的回调背景。)届时,您会接到 didExit 的电话。收到 didExit 后,您将再次符合上述 (1) 中的回调条件。

如果您想要对单个信标进行更精细的回调,有以下几种选择:

  1. 使用额外的区域定义(最多允许 20 个)并监控它们。

  2. 当您获得 didEnter 时动态更改您正在监视的区域。如果与特定通配符区域匹配的信标数量有限(例如少于 20 个),这可能会起作用。然后,您可以为每个子区域激活监控。

  3. 使用测距 API。这些为您提供每秒一次的回调,其中包含与某个区域匹配的所有匹配信标的列表。诀窍是这通常限制在后台区域转换后的​​ 10 秒内。但可以根据要求将其延长至 180 秒,或者如果您在 Info.plist 中声明您的应用是后台定位应用,则可以无限期延长。 (如果你走这条路,有一些技巧可以让它正常工作。)