Расположение 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), чтобы отслеживать местоположение пользователя в фоновом режиме и в состоянии завершения приложения.