Фоновые обновления местоположения останавливаются с проблемой фоновой задачи, выявленной в отладчике - PullRequest
0 голосов
/ 29 января 2020

Я использую фоновое обновление местоположения с iOS 9 без проблем, и эта проблема только что появилась в iOS 13. Консоль отладчика выявляет эту проблему, когда приложение входит в фоновый режим: «Не удается завершить BackgroundTask: фоновая задача с идентификатором 3 (0x3) не существует или, возможно, она уже завершена. Перерыв в UIApplicationEndBackgroundTaskError () для отладки. "

Вот как шаблонный код для обновлений местоположения в фоновом режиме:

Во-первых, код в AppDelegate:

if CLLocationManager.authorizationStatus() == .notDetermined {
   locationManager.requestAlwaysAuthorization()
   locationManager.allowsBackgroundLocationUpdates = true
}

info.plist:

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>"MY APP" is optimized to run in the background as well as when your using it directly.  For best results, choose ALWAYS.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>"MY APP" is optimized to run in the background.  Please choose ALLOW.</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Please choose ALLOW WHILE USING APP.  "MY APP" needs to use your location to get its altitude data.</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>location</string>

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

1 Ответ

0 голосов
/ 29 января 2020

Apple улучшила способ запроса разрешения пользователя на местоположение, чтобы сделать его более удобным для пользователя в iOS 13.

В вашем коде нет ничего плохого, и вы не должны ничего менять (так как вы уже используют requestAlwaysAuthorization() и allowsBackgroundLocationUpdates.)

По сути, происходит следующее: до iOS 12 у пользователя будет запрашиваться разрешение на местоположение, и он может выбрать Всегда разрешать, Разрешать один раз и не разрешать вообще. В iOS 13 доступны следующие опции: Разрешить, когда используется, разрешить один раз и не разрешить.

Затем iOS сам запросит разрешение «Всегда», когда сочтет необходимым (иначе, когда ваш приложение входит в фоновом режиме и пытается выполнить какое-либо действие, которое требует информации о местоположении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...