我正在开发一个应用程序,该应用程序严重依赖于监控可能在多个地区/地区的用户访问。我目前正在试验效果很好的区域监控,但是,位置回调并不像我想要的那样准确。我见过 CLVisit,但那里的文档并没有很好地解释它,尤其是它的使用。
1 回答
我认为您误解了 CVisits 的概念。实际上没有需要创建的访问对象。CLLocationManager 委托方法由苹果确定的算法触发(更多信息请参见wwdc 讲座)。这在 CLLocationManager文档中进行了解释...
获取访问的位置
在 iOS 中,访问服务为需要用户访问过的有趣地点的位置信息的应用程序提供了一种替代显着位置更改服务的方法。例如,如果用户在一个位置停留很长时间,则服务可能会在用户到达该位置时生成一个事件,而在用户离开该位置时生成另一个事件。该服务适用于可能已经在使用重要的位置更改服务并希望以更低功耗的方式执行此操作的应用程序。您不会使用此服务来创建导航应用程序或依赖定期位置更新的应用程序。
要开始传递访问相关事件,请将委托分配给位置管理器对象并调用其 startMonitoringVisits 方法。当位置管理器生成访问事件时,它将该信息传递给其委托的 locationManager:didVisit: 方法。交付给您的委托的事件数据仅包括您开始交付事件后发生的信息。换句话说,如果你在用户到达一个感兴趣的位置之后开始传递事件,那么当用户离开该位置时系统传递的事件将不会反映实际到达时间。如果系统终止了您的应用程序,则此服务会在新的访问事件准备好交付时重新启动它。
也就是说,如果您查看 NSHipster 的这篇文章,它引用了 CLVists 的一些当前问题(适用于 iOS 8.1)。它基本上继续说,如果您想要极其精确的基础设施,请不要使用 CLVisit。看起来你做对了(至少现在是这样)。
从 iOS 8.1 开始,CLVisit 并不是那么精确。虽然开始和结束时间通常在一两分钟内准确,但在什么是访问和什么不是访问的边缘处线条变得模糊。潜入街角咖啡店一分钟可能不会触发访问,但在特别长的红绿灯处等待可能会触发。Apple 很可能会在未来的操作系统升级中提高访问检测的质量,但现在您可能希望推迟依赖 CLVisit 来支持您自己的访问检测,因为这些用例对您的数据尽可能准确至关重要是。