进入区域(后台模式)后如何找到特定的iBeacon

6
这个问题是关于应用程序在后台时的情况。我有一个使用两个iBeacon的应用程序(相同的UUID,相同的Major,不同的minor)。
第一个iBeacon(minor 1)例如是门的。当应用程序在后台时,我会收到通知,告诉我我进入了该区域。这很好用。现在,例如,我走进商店,在某个时候会遇到第二个iBeacon(minor 2)。如果我处于第二个iBeacon的直接区域内,应用程序应该触发一个通知。(“嘿,你在收银台”)但我读到说当应用程序在后台时,这是不可能的。它只在我按肩膀按钮或主页按钮时才起作用。 http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html 所以问题是:有人能给我提示如何实现这个用例吗?
1个回答

14

几个要点:

创建信标区域时,可以选择只匹配UUID、UUID和Major值、或UUID、Major和Minor值。

如果只指定UUID,则您的信标进入/退出通知不会包括Major/Minor值信息。

同样,如果创建一个带有UUID和Major但没有Minor值的区域,则您的信标进入/退出消息将包括信标的UUID和Major值,但不包括Minor值。

最简单的方法是为跟踪的每个唯一的信标创建单独的区域。然后,您将获得每个信标的独立进入/退出通知。

如果您想让多个信标成为同一区域的一部分,但报告不同的Major或Major/Minor值,则必须打开信标范围并等待范围调用。在范围调用中,您将获得一个信标对象数组(不是信标区域对象,而是CLBeacon对象),用于匹配当前区域的所有信标。信标对象将包括该信标的实际UUID、Major和Minor。

如果您处于后台并且同时打开了信标监控和范围设置,您将收到一个didEnterRegion消息(或者可能是一个changed state消息),后面跟着几秒钟的范围信息,然后您的应用程序将回到睡眠状态。

当您的应用程序在后台运行时,唯一的真正选项是显示本地通知并希望用户再次唤醒您的应用程序。如果用户刷掉该通知,则系统提示用户进行解锁凭据(如果需要),然后带用户返回到您的应用程序。


4
好的回答。我想补充一点,当你收到监测通知时,它会在iBeacon被检测到时发送(最多50米范围内),而不是基于任何特定接近度。这个你无法控制。如果你真的需要给用户一个后台通知,只有当你处于“第二个iBeacon的直接区域”时才能触发,那么你就没那么幸运了。想要基于特定接近度采取行动的唯一方法是在前台进行范围测量。正如Duncan提到的,后台范围测量只持续几秒钟--不足以适应位置发生大的改变。 - davidgyoung
抱歉回复晚了。感谢您的答案。 - Carsten
那么应该怎么办呢?我处于同样的情况,只有在进入一个信标区域时才会收到通知,而在后台中,这可能会在实际接近之前提前50米触发。有没有一种方法可以在距离变化时通知我? - kanstraktar
此外,我知道您只能监视20个区域,因此如果您使用UUID、Major和Minor创建区域,我猜您将不得不始终跟踪您附近的所有信标,在它们远离时停止监视它们并开始监视其他信标——或者这该怎么工作? - kanstraktar
@kanstraktar,您最好发布一个新问题,而不是在别人的评论中开始第二个讨论。 - Duncan C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接