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

Posted

技术标签:

【中文标题】基于 UUID 监控 iBeacon 区域时,何时收到通知?【英文标题】:When do I get notified when monitoring an iBeacon region based on UUID? 【发布时间】:2019-08-21 15:47:36 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

    在与通配符区域匹配的所有信标消失之前,您将不会收到任何进一步的回调(这在前台需要至少 30 秒,在后台需要更长的时间。)那时,你会接到电话到didExit。在收到didExit 后,您将再次有资格获得上述(1)中的回调。

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

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

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

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

【讨论】:

非常感谢@davidyoung 的澄清。但是测距 API 只能在前台工作,对吗? 没关系,我刚刚发现那篇文章解释了如何做到这一点,如果它真的有意义的话:community.estimote.com/hc/en-us/articles/…

以上是关于基于 UUID 监控 iBeacon 区域时,何时收到通知?的主要内容,如果未能解决你的问题,请参考以下文章

iBeacon:何时向服务器发送信标事件

Swift iBeacon 只有一个信标被监控

iBeacon 监控具有相同 UUID 和不同主要、次要的多个信标

区域监控时检测 iBeacon 需要多长时间?

您如何检测 iBeacon 发射器何时关闭?安卓

当两个应用监控同一个 iBeacon 区域时会发生啥?