不断跟踪iOS上的用户位置

当他接近一些有趣的事情时,我需要不断监视用户的位置以通知他。 哪个是实现这个的正确方法?

我还没有能够保持计时器在后台运行(定期更新用户在服务器上的位置),我也看到订阅重大的位置更改可以让我接收位置更新,即使应用程序不运行,但我无法实现。 我在正确的道路上? 还有其他的select吗?

编辑 – 有一个必要条件,我应该已经暴露,这可能使我放松对真正的问题的重点:

  • 有趣的“东西”用户没有一个固定的位置,所以在发送推动之前,我必须确保用户目前在该位置(当然,我可以假设它为n分钟)。

您可以在VC中设置监视位置的东西,如下所示

在viewDidLoad方法中做如下

CLLocationManager locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyBest;(Accuracy according to your need) [locationManager startUpdatingLocation]; 

比你必须在CLLocationManagerDelegate协议的两个可选委托方法下覆盖

为iOS6 +

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{} 

和iOS 2到6

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

在这些方法中,你将得到更新的位置。 使用它,如你所愿。 每次更新这些方法的位置都会得到调用。

你需要的是geofencing。 在iOS中,它被称为“区域监控”。 您可以从startMonitoringForRegion:指南中的startMonitoringForRegion:开始startMonitoringForRegion: 更详细的信息在“ 地区监测指南”中

在iOS中,与您的应用程序相关联的区域会随时进行跟踪,包括您的应用程序未运行的时间。 如果应用程序未运行时跨越区域边界,则该应用程序将重新启动到后台以处理事件。 同样,如果应用程序在事件发生时被暂停,则会被唤醒并给予短时间(大约10秒)来处理事件。

据我所知,重要的更改位置更新是更新当前位置的唯一方法,当应用程序在后台运行或不被系统挂起(终止)。 当发生这种情况时,一定要检查UIApplicationLaunchOptionsLocationKey并初始化CLLocationManager以处理位置更改通知。 如果应用程序在前台运行,那很简单。

顺便说一下,为了让系统保持更新位置到您的应用程序,您必须启用项目的地图function和背景模式(位置更新)。

阅读苹果位置/地图文件了解更多详情。

免责声明:我在Cintric工作

我们在Cintric有类似的问题,实际上只是为了这个目的而创build了一个工具。 即使应用程序已经退出,它也会在后台跟踪位置,只使用1%的电池!

您可以下载.framework文件,将其拖到您的项目中,并用一行代码进行初始化: [CintricFind initWithApiKey:@"YOUR_API_KEY_HERE" andSecret:@"YOUR_SECRET_HERE"];

您可以免费获得一个API密钥。

这里有文档: https : //www.cintric.com/docs/ios

还有一篇博文在这里进一步解释: http : //www.blog.cintric.com/?p=121