iBeacon应该提供AlertView

时间:2013-11-28 16:31:21

标签: uialertview ibeacon

我在UIAlertViews上有点挣扎,我希望在进入灯塔范围时向用户显示。我希望只有在到达信标一定距离时才会出现UIAlertview。首先,我考虑在“didrangebeacons”委托方法中触发Alertview。但这会每秒触发一次AlertView。然后我想我应该在didEnterRegion中执行此操作,但是一旦用户在范围内(可能在20米之外)它就会被触发。

正确实施该方法的最佳做法是什么?我想到了我要设置的旗帜。例如:创建一个名为“showAlert”的标志,并在DidEnterRegion委托方法中将其初始设置为“YES”。一旦达到某个RSSI,我就提出警报视图并在此之后将其设置为NO。一旦信标区域退出,我将被设置回YES。

这是“正确”的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您只能在didRangeBeacons方法中获取距离信息。在该方法中,您将获得一系列信标。如果阵列中有多个信标,您需要决定该怎么做。我所做的是循环并找到最近的信标(基于准确度读数,这实际上是近似距离)

有时会使用空信标数组调用,或者所有信标显示接近未知和/或精度值为-1。你需要确保处理这些案件。

此外,如果你在后台,事情会搞砸。在这种情况下,当你输入一个信标的范围时,你会得到一个didEnterRegion呼叫,然后是一些测距呼叫(大约5秒,基于我的测试。)之后,测距呼叫停止,你不再得到用户将您的应用程序返回到前台。如果您在后台运行并忽略前几个测距呼叫,因为用户距离不够近,那么当用户离得更近时,您永远不会得到通知。

答案 1 :(得分:1)

在didRangeBeacons方法中,我会检查CLBeacon对象和/或RSSI的准确属性,以确定信标是否足够接近。

准确度是以米为单位的估计值,可能比使用RSSI更适合您,尽管我认为两者都兼容。

然后我将您的旗帜设置为显示警报的状态并显示警报。在委托方法“didExitRegion”中,我将重置标志,以便您准备好再次收到通知,如果您返回该区域。