Фоновая загрузка регулярно

Я хочу загружать местоположение в фоновом режиме каждые 30 секунд до 1 минуты. Является ли это возможным? Я обнаружил, что могу установить UIApplicationBackgroundFetchIntervalMinimum. Но я посмотрел вокруг этой константы, чтобы сказать устройству, чтобы оно извлекалось примерно каждые 30 минут. Любой способ сделать это? Спасибо.


person Carl Hung    schedule 17.07.2017    source источник


Ответы (2)


Я не знаю точной цели вашей загрузки местоположения каждые 30 секунд. Делать это не рекомендуется. Я думаю, вы можете использовать MonitoringSignificationChanges в структуре CoreLocation. Это даст вам обновление всякий раз, когда происходит значительное изменение местоположения. Это помогает экономить заряд батареи.

Запускает генерацию обновлений на основе существенных изменений местоположения следующим методом:

func startMonitoringSignificantLocationChanges()

Этот метод инициирует доставку событий местоположения асинхронно, возвращаясь вскоре после его вызова. События местоположения доставляются в метод locationManager(_:didUpdateLocations:) вашего делегата. Первым событием, которое должно быть доставлено, обычно является самое последнее кэшированное событие местоположения (если оно есть), но в некоторых случаях это может быть более новое событие. Получение исправления текущего местоположения может занять несколько дополнительных секунд, поэтому обязательно проверяйте метки времени на событиях местоположения в методе делегата.

Дополнительная информация: Apple Docs

person Sivajee Battina    schedule 17.07.2017
comment
Я пробовал уже. Если пользователь не перемещается, этот метод делегата не будет вызываться. Я даже пытался использовать тихие уведомления, чтобы сообщить приложению об обновлении. Через некоторое время после отправки сервер APN прекратит отправку примерно на 20 минут. И я также пробовал таймер. - person Carl Hung; 17.07.2017
comment
@CarlHung, вы не должны не даже делать это, stackoverflow.com/questions/41021733/ - person Ahmad F; 17.07.2017
comment
Отправка автоматических push-уведомлений слишком много раз не гарантирует доставку через APNS. Если слишком много запросов, он просто игнорирует - person Sivajee Battina; 17.07.2017

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

Опрашивать GPS каждые 30 секунд — тоже плохая идея, если только вы не навигационное приложение. Вы быстро разрядите батарею пользователя.

Точно так же загрузка местоположения пользователя каждые 30 секунд будет поддерживать сотовую связь / WiFi-радио на телефоне почти постоянно включенным, что довольно быстро разряжает батарею пользователя.

person Duncan C    schedule 17.07.2017