我有一个应用程序,我正在扫描信标(我知道UIID)并显示它们。我跑了几次,我几乎立即发现了信标。但现在每次运行它时,检测它们似乎需要更长时间。即使我把信标放在设备旁边的桌子上。
我已经尝试更换电池,从iPhone更换为iPad,检查Mac上的信标扫描应用程序,重建应用程序等。我还有来自不同制造商的一系列不同的信标,它们似乎都是有同样的问题。似乎无法解决这个问题。
我的代码基本上是这样的:
let locationManager = CLLocationManager()
locationManager.delegate = self
let region = CLBeaconRegion(proximityUUID: UUID(uuidString:"61687109-905F-4436-91F8-E602F514C96D")!, identifier: "BlueCat beacon")
locationManager.startMonitoring(for: region)
然后我可以在任何委托方法调用之前等待最多5分钟或更长时间。
这是我第一次尝试使用信标。这是正常的吗?设备是否可以花费很长时间才能看到信标?
答案 0 :(得分:1)
在理想条件下,iOS上的didEnterRegion
回调会在信标进入范围的几秒钟内完成。在不太理想的条件下,这些回调可能需要15分钟或更长时间。
有很多事情可能导致在监控时检测信标的延迟,而且在不确切知道您的测试方式的情况下很难确定。两个提示:
iOS设备上的硬件过滤器插槽数量有限,先到先得。如果您安装了一堆已占用这些插槽的信标应用程序(或者如果您的应用程序已经注册了一堆区域),则可能已经占用了所有这些插槽。一旦硬件过滤器插槽消失,检测就会回落到大约每15分钟发生一次的软件扫描。卸载可能持有这些插槽的所有应用程序(包括您的应用程序),然后重新安装您的应用程序。
当您将应用程序置于后台时,请确保您不在“区域内”。如果iOS认为它位于该区域,您将无法获得新的{{ 1}}回调,直到它意识到它离开该区域然后再次进入。 iOS实现它退出该区域的时间比实现它所需的时间长得多。为了确保它实现退出该区域,当应用程序位于前台时,您应始终为信标设置范围,并将应用程序保留在前景中大约一分钟,以确保iOS意识到它不再位于区域中(通常需要30个触发退出的测距秒数。)只有这样才能将它放在背景中并打开信标来测量检测时间。