0

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

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

这是做到这一点的“正确”方法吗?

谢谢!!

4

2 回答 2

3

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

有时,您会被调用一个空的信标数组,或者所有信标显示接近未知和/或精度值为 -1。您需要确保处理这些情况。

此外,如果您在后台,事情会变得一团糟。在这种情况下,当您进入信标的范围时,您会收到一个 didEnterRegion 调用,然后是几个测距调用(大约 5 秒,根据我的测试。)之后测距调用停止,除非用户将您的应用程序返回到前台。如果您在后台运行并且因为用户距离不够近而忽略了前几​​个测距调用,那么当用户靠近时您永远不会收到通知。

于 2013-11-28T21:30:12.327 回答
1

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

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

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

于 2013-11-29T13:10:39.043 回答