繁体   English   中英

应用程序终止/暂停时的后台用户位置

[英]Background user location when app is terminated/suspended

我一直试图找出如何在应用程序终止时获取用户的位置,就像应用程序Moves一样。 我知道这样做的唯一方法是使用重要的位置更改。 但是,如果位置发生重大变化,应用程序每隔500米就会被唤醒,并且只有在最后一次更新后大约5分钟才会被唤醒。

根据Apple的说法:

只要设备从之前的通知移动500米或更长时间,应用就会收到通知。 它不应该比每五分钟更频繁地预期通知。 如果设备能够从网络检索数据,则位置管理器更有可能及时发送通知。

在Moves应用程序中,即使应用程序终止,它也能够非常准确地检索用户的位置,而不会有太多的电池排水。 它似乎也没有打开背景位置,因为它在电池使用列表中的原因仅显示“背景活动”。 所以我想知道像Moves这样的应用程序是如何做到这一点的。 任何帮助都会很棒! 谢谢。

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

在此输入图像描述

来自Apple的文档

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

对于位置应用:

  • 系统会收到符合应用程序配置的交付条件的位置更新。

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

如果您经常需要更新位置但仍希望节省电池寿命,请尝试以下操作 -

  1. 添加在后台使用位置所需的权限。
  2. 使用startUpdatingLocation启动更新
  3. 使用allowDeferredLocationUpdatesUntilTraveled:timeout:在后台开始延迟更新allowDeferredLocationUpdatesUntilTraveled:timeout:在此方法中指定时间和距离过滤器。
  4. 请务必阅读此处的文档并正确指定所有属性以使其正常工作。

唯一的解决方案是使用CoreLocation的后台模式。 如果您的应用需要iOS 8,系统将重新启动您的应用,即使用户强制退出也是如此。 Apple Docs中记录了这一点:

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

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

- (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个选项可以完成这项工作。 第一个是发出无声通知,需要后端完成工作。 静音通知是某种推送通知,但它会在没有警报的情况下通知您的应用。 第二种解决方案是后台提取。 后台提取不需要后端解决方案,但遗憾的是,您无法控制实例化它所需的时间间隔。 第三个是没有消息的预定本地通知。

来自文档

跟踪用户的位置

有几种方法可以在后台跟踪用户的位置,其中大多数方法实际上并不要求您的应用在后台连续运行:

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

后台执行

并获取详细信息 - 获取用户的位置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM