Подходит ли использование Core Location для выполнения функций в фоновом режиме?

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

Например: приложение для сканирования и загрузки фотографий пользователя в целях резервного копирования, поэтому при входе в фоновое состояние оно продолжает сканирование и загрузку.

О чем я спрашиваю:

  • Если есть Фоновое выполнение механизмов для выполнения фоновых задач (Выберите цель -> Возможности -> Фоновые режимы), так зачем использовать основное местоположение для выполнения такой задачи?

  • Если использование Core Location отличается, в чем его преимущество?

Кроме того, я читал (и это то, что я предполагаю), что использование основного местоположения не для того, что подразумевается, должно привести к тому, что приложение будет отклонено, странная вещь, которая, как я уже упоминал, есть несколько приложений, делающих это ! Я чувствую себя немного сбитым с толку.


person Ahmad F    schedule 07.12.2016    source источник


Ответы (2)


Кроме того, я читал (и это то, что я предполагаю), что использование основного местоположения не для того, что подразумевается, должно привести к тому, что приложение будет отклонено, странная вещь, которая, как я уже упоминал, есть несколько приложений, делающих это ! Я чувствую себя немного сбитым с толку.

Вы правы, что сомневаетесь. не имитируйте такое поведение. Эти люди неправильно используют CoreLocation как способ заставить свой код работать в фоновом режиме, хотя на самом деле они не используют никаких функций CoreLocation.

Вам не разрешено делать что-то произвольно в фоновом режиме — и на это есть веские причины. Не нарушайте правила. Если вы хотите продолжать загрузку даже в фоновом режиме, используйте URLSession с фоновой URLSessionConfiguration. Делайте все правильно.

person matt    schedule 07.12.2016
comment
Спасибо! это кажется мне логичным, но мне было интересно, дает ли использование URLSessionConfiguration даже правильный способ той же возможности, что и использование основного местоположения (если я не ошибаюсь, это позволяет приложению работать вечно в фоновом режиме). И да, даже если это не так, мы должны придерживаться правил... Я спрашиваю, потому что считаю, что при этом есть какие-то ограничения(я) - person Ahmad F; 07.12.2016
comment
Фоновая настройка URLSessionConfiguration означает, что ваше приложение не работает в фоновом режиме. Система делает работу за вас, когда у нее есть время. Таким образом, все происходит максимально эффективно, потому что система выносит все необходимые суждения. - person matt; 07.12.2016

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

Чтобы ответить на вопрос ОП: вы можете попросить CLLocationManager получить significantLocationChanges. Это не только уведомит вас и даст вам процессорное время в фоновом режиме, но фактически запустит ваше приложение (даже после перезагрузки телефона!), чтобы сообщить вам об изменениях местоположения.

Это довольно хороший способ пообещать себе дополнительное время обработки в фоновом режиме (хотя, как вы сказали, это очень плохое «поведение приложения» и может даже привести к тому, что ваше приложение будет отклонено из AppStore)

Насколько я знаю, первым приложением, которое сделало это, был Dropbox — у них был целый экран в настройках, объясняющий, почему они запрашивают у вас местоположение только для резервного копирования ваших изображений … поскольку в iOS нет никакого события (для сторонних разработчиков) для информирования приложения при изменении фотографий устройства решение Dropbox заключалось в том, чтобы «проснуться» при этих изменениях местоположения и проверить себя на наличие изменений, если они их найдут — они будут загружать новые изображения в Dropbox в фоновом режиме.

significantLocationChanges использует только методы с низким энергопотреблением, такие как сотовые вышки и поблизости Wi-Fi, и поэтому довольно легко расходует заряд батареи. Однако сама обработка может быть интенсивной, в зависимости от приложения, использующего этот метод.

person Aviel Gross    schedule 07.12.2016
comment
Спасибо за ваше время и внимание. Ссылаясь на приложение Dropbox, вы думаете, что оно продолжает делать это до сих пор? или он изменился на другой элегантный подход для выполнения той же функциональности? - person Ahmad F; 07.12.2016
comment
Я считаю, что они перестали это делать, и, как сказал @matt, крайне желательно, чтобы вы или кто-либо другой не применяли такой подход. Другим решением является использование фоновой выборки, которая существует с iOS7 и дает вам процессорное время в фоновом режиме, когда система считает, что может сделать это без ущерба для пользовательского опыта использования/батареи/и т. д. Это гораздо более чистый подход к обновлению данных в фоновом режиме. - person Aviel Gross; 07.12.2016