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