不断跟踪iOS上的用户位置

时间:2014-02-07 09:57:09

标签: ios background location monitoring

我需要不断监控用户的位置,以便在他接近有趣的事情时通知他。这是实现这一目标的正确方法吗?

我无法在后台运行计时器(定期更新用户在服务器上的位置),我还读到订阅重要位置更改可能会让我收到位置更新,即使应用程序未运行,但我无法实现它。 我在正确的道路上吗?还有其他选择吗?

编辑 - 有一个必要条件,我应该暴露,这可能让我放松对真正问题的关注:

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

4 个答案:

答案 0 :(得分:0)

您可以在VC中设置监控位置内容,如下所示

在viewDidLoad方法中执行如下

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

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

for iOS6 +

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

和iOS 2到6

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

在这些方法中,您将获得更新的位置。根据需要使用它。每次位置更新这些方法都会得到电话。

答案 1 :(得分:0)

您需要的是地理围栏。在iOS中,它被称为“区域监控”。您可以从CLLocationManager指南中的startMonitoringForRegion:开始。更多细节在Region Monitoring Guide

  

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

答案 2 :(得分:0)

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

顺便说一句,为了让系统不断更新应用程序的位置,您必须为项目启用地图功能和背景模式(位置更新)。

阅读Apple位置/地图文档以获取更多详细信息。

答案 3 :(得分:0)

免责声明:我为Cintric工作

我们在Cintric遇到了类似的问题,实际上是为了这个目的而制作了一个工具。即使在应用程序退出后,它也会跟踪背景中的位置,仅使用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

相关问题