Расположение UIBackgroundModes и значительные изменения местоположения с мониторингом региона

У меня есть приложение, которое использует комбинацию startMonitoringForRegion: и startMonitoringSignificantLocationChanges, чтобы знать, где находится пользователь, когда приложение находится в фоновом режиме. Означает ли это, что мне нужно включить значение location для клавиши UIBackgroundModes в Info.plist?

Это цитата из документов:

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

...

Приложение, которое обеспечивает постоянное обновление местоположения для пользователя (даже в фоновом режиме), может включать службы определения местоположения, включая ключ UIBackgroundModes (со значением местоположения) в файле Info.plist. Включение этого значения в ключ UIBackgroundModes не мешает системе приостанавливать приложение, но оно сообщает системе, что оно должно пробуждать приложение, когда есть новые данные о местоположении для доставки. Таким образом, этот ключ эффективно позволяет приложению запускаться в фоновом режиме для обработки обновлений местоположения всякий раз, когда они происходят.

Моя интерпретация этого заключается в том, что значение location для ключа UIBackgroundModes требуется только в том случае, если приложение нуждается в постоянном обновлении местоположения, например, в спутниковом приложении.

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

Кроме того, единственное место, которое UIBackgroundModes упоминается в Справочник класса CLLocationManager, находится в обсуждении startUpdatingLocation, которое я не используя.

Ответы

Ответ 1

Вы правы в отношении ключа location, это требуется только тогда, когда ваше приложение нуждается в высокоточных обновлениях местоположения даже в фоновом режиме. Что-то вроде Runkeeper использует это, чтобы позволить отслеживать ваше местоположение, даже если вы используете другое приложение с многозадачностью. Из документов для iOS-ключей: UIBackgroundModes

"location": приложение предоставляет пользователю информацию о местоположении и требует использование стандартных служб определения местоположения (в отличие от значительная служба определения местоположения) для реализации этой функции.

и

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

Мониторинг регионов будет работать без клавиши location. Фактически, мониторинг региона будет работать без включения каких-либо специальных ключей iOS.

Вы говорите, что не используете CLLocationManager, но если вы используете мониторинг региона, вам придется использовать этот класс. Вам нужно настроить делегат менеджера местоположений для вашего приложения, чтобы получить уведомления о регионе.

Ответ 2

Да, вам нужно добавить ключ "location" в режимах Backround в Info.plist, если вы используете значительную службу определения местоположения (startMonitoringSignificantLocationChanges), чтобы отслеживать местоположение пользователя в фоновом режиме и в состоянии завершения приложения.