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

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

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

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

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

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


Обновлено:

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

Приходится звонить сначала при использовании, а потом всегда

lorem ipsum 22.08.2024 23:01

Вам нужно посмотреть видео WWDC о том, как использовать запросы местоположения.

matt 23.08.2024 00:18

хм? Я один здесь запутался? Было бы здорово, если бы я случайно наткнулся на подходящее видео WWDC, чтобы посмотреть здесь, но я не думаю, что будет преувеличением сказать, что интуиция большинства людей для чего-то подобного заключается в том, чтобы сначала прочитать документацию. И когда я прочитал это, там ничего не упоминалось о первом запросе «при использовании», хотя это явно является обязательным условием. Такая документация бесполезна и будет поджарена для любой из существующих платформ OSS. Извините за напыщенную речь, но Apple не облегчает жизнь новым разработчикам.

bli00 23.08.2024 01:07

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

bli00 23.08.2024 01:09

Первая ссылка приведет вас к подробной информации.

lorem ipsum 23.08.2024 01:57

По первой ссылке нет. Можете ли вы указать мне, где в этой ссылке сначала написано «запрашивать при использовании»?

bli00 23.08.2024 23:30

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

lorem ipsum 25.08.2024 21:40

Вы имеете в виду примечание, в котором говорится: «Если ваше приложение запрашивает и получает авторизацию «При использовании», вы можете сделать отдельный запрос на авторизацию «Всегда» позже?»

bli00 25.08.2024 21:55

Я не думаю, что кто-то взглянет на предложение и интерпретирует его как «При использовании является обязательным условием». На это ответил @yo1995 ниже.

bli00 25.08.2024 21:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
9
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

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

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

Другие вопросы по теме