0

我正在玩 iBeacon,我发现令人沮丧的是,每当我们在信标区域内然后我们走出去时,它可能需要长达 15 分钟,直到手机检测到“退出事件”。

为了克服这个问题,我正在考虑在我们进入后立即停止信标监控(通过在CLLocationManager上调用stopMonitoringForRegion)。

但是我试过了,它似乎不起作用。

这就是我认为 iOS 所做的:

iOS region table:

App1: UUIDx1
App1: UUIDx2
..
App1: UUIDx20 (Maximum)
App2: UUIDy1
App3: UUIDz1
App3: UUIDz2

当我们停止监视除 iOS 之外的区域 I 以从内部扫描表中删除相应的 UUID 时。然而,这似乎并没有阻止 iOS 等待(最多 15 分钟),然后才意识到它确实退出了该区域。

以前有没有人处理过这个问题?

我们如何对 iOS 和应用程序进行编程以创建后续的didEnterRegion事件(即使在 15 分钟内)?

4

1 回答 1

1

两个提示:

  1. 当您的应用程序处于前台时,您可以通过在监视的同时对您的区域进行测距来加速区域进入和退出事件。测距将确保当您的应用程序处于前台时,蓝牙扫描会持续进行。这将使进入发生在信标检测到的一秒钟内,并在不再看到信标的几秒钟内发生退出。

  2. 为获得最佳效果,请安装尽可能少的信标应用程序,监控尽可能少的区域。 虽然没有公布信息,但有证据表明 iOS 试图加速基于硬件辅助的检测。蓝牙芯片可让您为感兴趣的蓝牙数据包的字节模式设置硬件过滤器,但它们的插槽数量有限。在 iOS 设备上注册监控的第一个区域(30 个?)将获得这些硬件辅助插槽。稍后设置为监视的区域可能无法获得这些插槽,从而迫使 CoreLocation 回退到完整的蓝牙扫描。如果前台应用程序的测距处于活动状态,则这些扫描会持续进行,从而提供快速结果。如果测距未激活,则 iOS 将执行定期后台扫描,通常每 15 分钟一次。

于 2016-06-08T15:36:50.150 回答