Я пытаюсь получить обновления местоположения, пока мое приложение приостановлено - согласно документации, которую я прочитал, это не должно быть проблемой, и я я выполняю все необходимые шаги, но как только приложение приостановлено, обновления местоположения, похоже, не происходят.Делегат CLLocationManager не получает обновления местоположения после приостановки приложения, несмотря на то, что обновления фонового местоположения включены.
Я видел похожие сообщения, в которых есть решения, связанные с использованием startMonitoringSignificantLocationChanges, но, согласно моему пониманию документации, мне не нужно реализовывать это поверх startUpdatingLocation.
В соответствии с документацией, если включены обновления фонового местоположения, система будет приостановлена, но будет пробуждена при появлении новых данных о местоположении.
Поскольку документация состояния «В случае подвешенного приложения, система пробуждается приложением, обеспечивает обновление делегату менеджера РАСПОЛОЖЕНИЯ в» Я ожидаю, что я могу обработать место обновляет то же самое, если приложение на переднем плане или в фоновом режиме.
У меня есть обновления местоположения, выбранные на вкладке «Возможности», а в файле info.plist ключ UIBackgroundModes включает в себя местоположение в массиве значений.
Что мне не хватает?
Для справки, вот как я объявляю свой CLLocationManager.
lazy var locationManager: CLLocationManager = {
let locationManager = CLLocationManager()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.delegate = self
locationManager.activityType = .fitness
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = true
return locationManager
}()
«Включить поддержку определения местоположения из раздела режимов Фоновых вкладок возможностей в вашем Xcode проекте. (Вы также можете включить эту поддержку, в том числе и ключ UIBackgroundModes со значением местоположения в вашем файл Info.plist приложения.) Включение этого режима не препятствует приостановке работы системы, но она сообщает системе, что она должна пробуждать приложение, когда есть новые данные о местоположении для доставки. Таким образом, этот ключ эффективно позволяет приложению запускать в фоновом режиме для обработки обновлений местоположения всякий раз, когда они происходят ».
«Система обеспечивает обновление местоположения на фон местоположения приложений, когда приложение находится на переднем плане, работает в фоновом режиме, или приостановлено. В случае подвесного приложения, система пробуждается приложение доставляет обновление делегату менеджера местоположения, а затем возвращает приложение в приостановленное состояние как можно скорее ».