在 iOS 上不断跟踪用户位置

Posted

技术标签:

【中文标题】在 iOS 上不断跟踪用户位置【英文标题】:Constantly tracking user location on iOS 【发布时间】:2014-03-04 16:11:10 【问题描述】:

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

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

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

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

【问题讨论】:

这个问题可能与***.com/questions/17465929/…重复 【参考方案1】:

您可以在您的 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

在这些方法中,您将获得更新的位置。随心所欲地使用它。每次位置更新这些方法获取调用。

【讨论】:

是的,除非这不能回答问题,因为当应用程序在后台时更新会暂停。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

阅读 Apple 位置/地图文档了解更多详情。

【讨论】:

【参考方案4】:

免责声明:我为 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

【讨论】:

Cintric 是否将数据发送到其云端?

以上是关于在 iOS 上不断跟踪用户位置的主要内容,如果未能解决你的问题,请参考以下文章

走路时iOS跟踪位置

室内地图 - 如何使用室内地图跟踪用户位置和方向 - Android 和 IOS [关闭]

iOS 后台位置跟踪在测试设备上失败

用于跟踪用户位置的高效后台服务

是否可以通过他在 ios 中的电话号码跟踪用户位置?

iOS:获取用户位置