Фоновое местоположение пользователя, когда приложение завершено/приостановлено
Я пытаюсь выяснить, как получить местоположение пользователя, когда приложение завершается так, как это делает приложение Moves. Единственный способ, которым я это знаю, - это существенные изменения местоположения. Однако при значительных изменениях местоположения приложение только разбуждается каждые 500 метров и только в том случае, если оно прошло около 5 минут после последнего обновления.
Согласно Apple:
Приложения могут ожидать уведомления, как только устройство перемещается на 500 метров или более из своего предыдущего уведомления. Он не должен ожидать уведомлений чаще, чем раз в пять минут. Если устройство может извлекать данные из сети, диспетчер местоположений гораздо чаще отправляет уведомления своевременно.
В приложении "Перемещение" даже с приложением прекращается, он может очень точно извлекать местоположение пользователя, не имея большого количества дренажа в батарее. У него также нет фонового местоположения, так как причина в списке использования батареи показывает только "Фоновая активность". Поэтому мне интересно, как это делает приложение вроде Moves. Любая помощь будет замечательной! Спасибо.
Ответы
Ответ 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
Выполнение фона
И для деталей - Получение расположения пользователей