Является ли целесообразным использование основного местоположения для выполнения функций в фоновом режиме?

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

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

Что я спрашиваю:

  • Если существуют механизмы фонового выполнения для выполнения фоновых задач (выберите "Цель" -> "Возможности" -> "Фоновые режимы"), тогда зачем использовать такое расположение в "Базовом местоположении"?

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам