2014-02-07 42 views
6

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

我还没有能够保持计时器在后台运行(定期更新用户在服务器上的位置),我还了解到订阅重要的位置更改可能会让我接收位置更新,即使应用程序不是跑步,但我不能实现它。 我在正确的道路上吗?还有其他选择吗?

编辑 - 有,我应该暴露的必要条件,并且很可能使我失去了专注于真正的问题:

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

这阙是可重复http://stackoverflow.com/questions/17465929/how-to-的track-user-location-in-background – freelancer

回答

0

您可以设置监控位置的东西,在你的VC如下

在viewDidLoad方法

做如下

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

比你要overrite低于CLLocationManagerDelegate协议的两个可选的委托方法

for iOS6 +

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

和iOS的2至6

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
在这些方法中,你会得到更新的位置

。根据需要使用它。每次更新这些方法的位置都会获得呼叫。

+0

是的,但这不能回答问题,因为更新在应用程序处于后台时暂停。 – Fogmeister

0

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

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

0

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

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

阅读苹果的更多详细地点/地图文件。

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

+0

是Cintric将数据发送到其云吗? – netshark1000