Невозможно запросить авторизацию местоположения «всегда»

Я пытаюсь запросить always доступ к обновлениям местоположения. Согласно документации Apple, мне нужно добавить ключ NSLocationAlwaysAndWhenInUseUsageDescription в мой info.plist и вызвать requestAlwaysAuthorization() на мой CLLocationManager.

Однако это просто не работает. Нет всплывающих окон с запросом авторизации и сообщений об ошибках:

ContentView()
    .onAppear {
        CLLocationManager().requestAlwaysAuthorization()
    }

Это ДЕЙСТВИТЕЛЬНО работает, когда я меняю клавишу info.plist на NSLocationWhenInUseUsageDescription и вместо этого вызываю requestWhenInUseAuthorization().

Что я делаю неправильно?


Обновлено:

Я также попробовал добавить возможности «Обновления местоположения»:


50
1

Ответ:

Решено

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

  1. Во-первых, это статья Выбор авторизации служб определения местоположения для запроса. По сути, там говорится, что вы можете запросить авторизацию Always самостоятельно, так что в этом отношении вы правы.
  2. Как тогда запросить авторизацию Always? Он ведет на эту страницу API: requestAlwaysAuthorization. На этой странице написано

Вы должны вызвать этот метод или метод requestWhenInUseAuthorization(), прежде чем ваше приложение сможет получать информацию о местоположении. Чтобы вызвать этот метод, у вас должны быть ключи NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription в файле Info.plist вашего приложения.

  • что может быть нелогичным - «если я запрашиваю только Всегда, зачем нужны два ключа в списке?!»
  1. Наконец, есть разница между macOS и iOS. Если ваше приложение является мультиплатформенным, вы на собственном горьком опыте поймете, сколько хлопот нужно, чтобы пройти через App Store Connect. Но это история для другого раза.

Подумайте об этом так: авторизация «При использовании» является базовым вариантом для всех авторизаций. Вы должны представить это предупреждение в качестве первого шага для получения разрешений на определение местоположения.

Более того, даже если вы запросили и получили разрешение «Всегда», iOS все равно будет предлагать пользователю в случайное время в будущем предупреждение «Изменить на только во время использования».

Итак, вы поняли… Apple просто не хочет, чтобы вы использовали «Всегда».