ios - 基于 UUID 监控 iBeacon 区域时,何时收到通知?
问题描述
当它进入具有给定 UUID 的任何 iBeacon 的范围内时,我想构建它会得到通知(即使在后台)。
我知道我可以为每个信标监控一个单独的区域,但如果我理解正确的话,在 iOS 上,我只能监控 20 个区域。
因此,另一种选择是仅根据其 UUID 监视区域,但是我何时才能收到该区域的进入/退出通知?每当我进入或超出具有相同 UUID 的任何信标的范围时,还是仅当我进入第一个信标的范围而超出最后一个信标的范围时?
解决方案
如果您基于仅包含 ProximityUUID(留下主要和次要 nil)的通配符区域进行监控,则:
第一次检测到第一个信标时,您只会收到一个回调。
didEnter
如果检测到与此通配符区域匹配的第二个、第三个或其他信标,则您没有收到任何监控回调。在与通配符区域匹配的所有信标消失之前,您将不会收到任何进一步的回调(这在前台至少需要 30 秒,在后台需要更长的时间。)那时,您将接到
didExit
. 收到后didExit
,您将再次有资格获得上述(1)中的回调。
如果您想要关于单个信标的更精细的回调,有几种选择:
使用额外的区域定义(最多允许 20 个)并监控它们。
当您获得
didEnter
. 如果与特定通配符区域匹配的信标数量有限(例如少于 20 个),这可能会起作用。然后,您可以为这些子区域中的每一个激活监控。使用测距 API。这些为您提供每秒一次的回调,其中包含与区域匹配的所有匹配信标的列表。诀窍在于,这通常限制在后台区域转换后的 10 秒内。但是可以根据请求将其延长到 180 秒,或者如果您在 Info.plist 中声明您的应用程序是后台位置应用程序,则可以无限期延长。(如果你走这条路,有一些技巧可以让它正常工作。)
推荐阅读
- wpf - CefSharp ctrl+f5
- kotlin - 如何在 Windows 上编译和运行涉及协程的 Kotlin 代码
- flutter - Java DTO 到 Flutter 对象并返回
- angularjs - 以角度将数组值存储在对象中
- ordinal - CLMM 事后多重比较,包括响应变量的水平
- c# - 我们可以使用 c# 对 openshift pod 进行读/写操作吗?
- laravel - 我怎么能用 laravel eloquent 计算孩子的孩子
- c++ - 并行与顺序天真的快速排序
- sql - 将 ML 的 RGB 值保存在数据库中
- python - 用folium在物体上绘制航向