应用程序终止/暂停时的背景用户位置

我一直在试图找出如何获得用户的位置,当应用程序被终止,如应用程序Moves做到这一点。 我知道这样做的唯一方法是显着的位置变化。 然而,由于地理位置发生重大变化,应用程序只能在距离最近一次更新大约5分钟的情况下,每隔500米唤醒一次。

据苹果介绍:

一旦设备从先前的通知移动500米或更远,应用程序就可以预期发出通知。 它不应该比每五分钟一次更频繁地发出通知。 如果设备能够从networking中检索数据,则位置pipe理者更可能及时地发送通知。

在移动应用程序中,即使应用程序被终止,也能够非常准确地检索用户的位置,而不会在电池中产生太多的stream失。 它也似乎没有打开背景位置,因为它在电池使用清单中的原因只显示“后台活动”。 所以我想知道像Moves这样的应用是如何做到这一点的。 任何帮助将是伟大的! 谢谢。

您可以在500米地区注册地区,并在其中注册通知地区通知。 当它达到一个,如果他们,你的应用程序在后台启动。 然后,重新注册保留该位置的新的中心。

在这里输入图像说明

从Apple的文档 :

支持后台执行的应用程序可能会被系统重新启动以处理传入的事件。 如果应用程序由于用户强制退出而被终止,系统会在发生以下事件之一时启动应用程序:

对于位置应用:

  • 系统会收到一个位置更新,以符合应用程序configuration的传送条件。

  • 设备进入或退出注册区域。 (地区可以是地理区域或iBeacon地区。)

如果您经常需要位置更新,但仍想节省电池使用时间,请尝试以下操作 –

  1. 添加在后台使用位置所需的权限。
  2. 使用startUpdatingLocation启动更新
  3. 开始在后台使用allowDeferredLocationUpdatesUntilTraveled:timeout:延迟更新allowDeferredLocationUpdatesUntilTraveled:timeout:在此方法中指定时间和距离filter。
  4. 确保你阅读这里的文档,并正确指定所有的属性来使其工作。

唯一的解决scheme是使用CoreLocation的背景模式。 如果您的应用程序需要iOS 8,即使用户强制退出,系统也会重新启动您的应用程序。 这在Apple Docs中有logging :

在大多数情况下,系统在用户强制退出后不会重新启动应用程序。 位置应用程序是一个例外,iOS 8和更高版本在用户强制退出后重新启动。 然而,在其他情况下,用户必须明确地启动应用程序或重新启动设备,然后系统才能将应用程序自动启动到后台。

在iOS 8中他们是我们需要注意的新步骤,以使得获取工作的位置。 第一步是根据应用程序的主要function将一个或两个键添加到项目的.plist中。 这两个键是NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription,然后你需要添加一个string,向用户解释为什么应用程序需要访问他的位置,在“这个应用程序使用的位置在背景/前景因为A, B和C“。 这些string中的每一个都有相应的需要调用的授权方法,WhenInUse或Alway(即Background)。

 - (void)startStandardUpdates { // Create the location manager if this object does not // already have one. if (nil == locationManager) locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; // Set a movement threshold for new events. locationManager.distanceFilter = 500; // meters [locationManager startUpdatingLocation]; } 

从我目前的经验来看,你有3个select来完成这项工作。 第一个是要有一个无声的通知,这需要后端的努力。 无声通知是某种推送通知,但它通知您的应用程序没有提示。 第二个解决scheme是后台提取。 后台提取不需要后端解决scheme,但遗憾的是,您无法控制实例化它所需的时间间隔。 第三个是没有消息的预定本地通知。

从文档

跟踪用户的位置

有几种方法可以在后台跟踪用户的位置,其中大部分并不需要您的应用程序在后台连续运行:

 The significant-change location service (Recommended) Foreground-only location services Background location services 

后台执行

详细信息 – 获取用户的位置