iOS:信标检测需要很长时间
iOS: beacons detection taking a long time
我有一个应用程序,我可以在其中扫描信标(我知道 UIID)并显示它们。前几次我 运行 我几乎立刻就找到了信标。但是现在我每次 运行 它,似乎需要越来越长的时间来检测它们。尽管我的信标就放在设备旁边的桌子上。
我试过更换电池,从 iPhone 更改为 iPad,检查 Mac 上的信标扫描应用程序,重建应用程序等。我也运行ge 来自不同制造商的不同信标,它们似乎都有相同的问题。似乎没有什么可以解决这个问题。
我的代码基本上是这样的:
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 分钟或更长时间才能调用任何委托方法。
这是我第一次尝试使用信标。这是正常的吗?设备看到信标需要很长时间吗?
在理想情况下,didEnterRegion
iOS 上的回调会在信标进入范围后的几秒内出现。在不太理想的情况下,这些回调可能需要 15 分钟或更长时间。
有很多事情会导致在监控时延迟检测信标,如果不确切知道您是如何测试的,就很难确定。两个提示:
iOS 设备上的硬件筛选器插槽数量有限,先到先得。如果你安装了一堆占用了这些插槽的信标应用程序(或者如果你的应用程序注册了一堆区域),那么所有这些插槽都可能已被占用。一旦硬件过滤器插槽消失,检测就会回退到大约每 15 分钟发生一次的软件扫描。卸载所有可能占用这些插槽的应用程序(包括您的应用程序),然后仅重新安装您的应用程序。
当您将应用程序置于后台时,请确保您没有 "in region"。 如果 iOS 认为它处于该区域,您将不会收到新的 didEnterRegion
回调,直到它意识到它离开该区域然后再次进入。 iOS 意识到自己离开区域的时间比意识到自己进入区域的时间要长得多。为确保它意识到它已离开该区域,您应该始终在应用程序位于前台时寻找信标,并让该应用程序在前台保持约一分钟的范围,以确保 iOS 意识到它不再位于该区域(通常需要 30 秒的测距才能触发出口。)然后才应该将其置于后台并打开信标以测量检测时间。
我有一个应用程序,我可以在其中扫描信标(我知道 UIID)并显示它们。前几次我 运行 我几乎立刻就找到了信标。但是现在我每次 运行 它,似乎需要越来越长的时间来检测它们。尽管我的信标就放在设备旁边的桌子上。
我试过更换电池,从 iPhone 更改为 iPad,检查 Mac 上的信标扫描应用程序,重建应用程序等。我也运行ge 来自不同制造商的不同信标,它们似乎都有相同的问题。似乎没有什么可以解决这个问题。
我的代码基本上是这样的:
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 分钟或更长时间才能调用任何委托方法。
这是我第一次尝试使用信标。这是正常的吗?设备看到信标需要很长时间吗?
在理想情况下,didEnterRegion
iOS 上的回调会在信标进入范围后的几秒内出现。在不太理想的情况下,这些回调可能需要 15 分钟或更长时间。
有很多事情会导致在监控时延迟检测信标,如果不确切知道您是如何测试的,就很难确定。两个提示:
iOS 设备上的硬件筛选器插槽数量有限,先到先得。如果你安装了一堆占用了这些插槽的信标应用程序(或者如果你的应用程序注册了一堆区域),那么所有这些插槽都可能已被占用。一旦硬件过滤器插槽消失,检测就会回退到大约每 15 分钟发生一次的软件扫描。卸载所有可能占用这些插槽的应用程序(包括您的应用程序),然后仅重新安装您的应用程序。
当您将应用程序置于后台时,请确保您没有 "in region"。 如果 iOS 认为它处于该区域,您将不会收到新的
didEnterRegion
回调,直到它意识到它离开该区域然后再次进入。 iOS 意识到自己离开区域的时间比意识到自己进入区域的时间要长得多。为确保它意识到它已离开该区域,您应该始终在应用程序位于前台时寻找信标,并让该应用程序在前台保持约一分钟的范围,以确保 iOS 意识到它不再位于该区域(通常需要 30 秒的测距才能触发出口。)然后才应该将其置于后台并打开信标以测量检测时间。