Подтвердить что ты не робот

Фоновое местоположение пользователя, когда приложение завершено/приостановлено

Я пытаюсь выяснить, как получить местоположение пользователя, когда приложение завершается так, как это делает приложение Moves. Единственный способ, которым я это знаю, - это существенные изменения местоположения. Однако при значительных изменениях местоположения приложение только разбуждается каждые 500 метров и только в том случае, если оно прошло около 5 минут после последнего обновления.

Согласно Apple:

Приложения могут ожидать уведомления, как только устройство перемещается на 500 метров или более из своего предыдущего уведомления. Он не должен ожидать уведомлений чаще, чем раз в пять минут. Если устройство может извлекать данные из сети, диспетчер местоположений гораздо чаще отправляет уведомления своевременно.

В приложении "Перемещение" даже с приложением прекращается, он может очень точно извлекать местоположение пользователя, не имея большого количества дренажа в батарее. У него также нет фонового местоположения, так как причина в списке использования батареи показывает только "Фоновая активность". Поэтому мне интересно, как это делает приложение вроде Moves. Любая помощь будет замечательной! Спасибо.

4b9b3361

Ответ 1

Вы можете зарегистрироваться для регионов в области 500 м и зарегистрировать для них уведомление об уведомлении. Когда он достигает одного, если они, ваше приложение запускается в фоновом режиме. Затем перерегистрируйте для новых, сохраняя это место в центре.

enter image description here

От Документация для Apple:

Приложения, поддерживающие фоновое выполнение, могут быть перезаписаны системой для обработки входящих событий. Если приложение прекращено по какой-либо причине, отличной от силы пользователя, покидающей его, система запускает приложение, когда происходит одно из следующих событий:

Для приложений местоположения:

  • Система получает обновление местоположения, которое соответствует установленным приложениям критериям доставки.

  • Устройство ввело или вышло из зарегистрированного региона. (Регионы могут быть географическими регионами или областями iBeacon.)

Ответ 2

Если вам нужны обновления местоположения часто, но вы все же хотите сэкономить время работы от батареи, попробуйте это -

  • Добавьте необходимые разрешения для использования местоположения в фоновом режиме.
  • Запустите обновления, используя startUpdatingLocation
  • Начать удаление обновлений в фоновом режиме с помощью allowDeferredLocationUpdatesUntilTraveled:timeout: Определить фильтры времени и расстояния в этом методе.
  • Убедитесь, что вы прочитали docs здесь и правильно указали все свойства, чтобы заставить его работать.

Ответ 3

Единственное решение - использовать фоновый режим с CoreLocation. Если вашему приложению требуется iOS 8, система перезапустит ваше приложение, даже если сила закроется пользователем. Это описано в Apple Docs:

В большинстве случаев система не перезапускает приложения после того, как они становятся силовыми выходить пользователем. Единственным исключением являются приложения для местоположения, которые в iOS 8 и позже перезапускаются после того, как пользователь покидает команду. В других однако, пользователь должен явно запустить приложение или перезагрузить устройства до того, как приложение может быть запущено автоматически в фон системой.

Ответ 4

в iOS 8 они являются новыми шагами, на которые нужно обратить внимание, чтобы сделать работу по выбору места. Первый шаг - добавить один или два ключа в проекты .plist в зависимости от основных функций приложения. Этими двумя ключами являются NSLocationWhenInUseUsageDescription и NSLocationAlwaysUsageDescription, вам нужно будет добавить строку, которая объясняет пользователю, почему приложение должно получить доступ к его местоположению, что-то вроде строк "Это приложение использует местоположение в фоновом режиме/переднем плане из-за A, B и C". Каждая из этих строк имеет соответствующий метод авторизации, который нужно вызывать, 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];
}

Ответ 5

Из моего нынешнего опыта у вас есть 3 варианта, чтобы сделать эту работу. Первый из них - иметь тихое уведомление, требующее усилий, выполняемых бэкэнд. Молчаливое уведомление - это своего рода push-уведомление, но оно уведомляет ваше приложение без предупреждения. Второе решение - это фоновые выборки. Исходные выборки не требуют базового решения, но, к сожалению, вы не можете контролировать интервалы, необходимые для его создания. У третьего есть запланированные локальные уведомления без сообщений.

Ответ 6

Из документов

Отслеживание местоположения пользователей

Существует несколько способов отслеживания местоположения пользователей в фоновом режиме, большинство из которых фактически не требуют, чтобы ваше приложение непрерывно запускалось в фон:

The significant-change location service (Recommended)

Foreground-only location services

Background location services

Выполнение фона

И для деталей - Получение расположения пользователей