不断跟踪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