Я пытаюсь запросить always
доступ к обновлениям местоположения. Согласно документации Apple, мне нужно добавить ключ NSLocationAlwaysAndWhenInUseUsageDescription
в мой info.plist
и вызвать requestAlwaysAuthorization()
на мой CLLocationManager
.
Однако это просто не работает. Нет всплывающих окон с запросом авторизации и сообщений об ошибках:
ContentView()
.onAppear {
CLLocationManager().requestAlwaysAuthorization()
}
Это ДЕЙСТВИТЕЛЬНО работает, когда я меняю клавишу info.plist
на NSLocationWhenInUseUsageDescription и вместо этого вызываю requestWhenInUseAuthorization()
.
Что я делаю неправильно?
Обновлено:
Я также попробовал добавить возможности «Обновления местоположения»:
Вам нужно посмотреть видео WWDC о том, как использовать запросы местоположения.
хм? Я один здесь запутался? Было бы здорово, если бы я случайно наткнулся на подходящее видео WWDC, чтобы посмотреть здесь, но я не думаю, что будет преувеличением сказать, что интуиция большинства людей для чего-то подобного заключается в том, чтобы сначала прочитать документацию. И когда я прочитал это, там ничего не упоминалось о первом запросе «при использовании», хотя это явно является обязательным условием. Такая документация бесполезна и будет поджарена для любой из существующих платформ OSS. Извините за напыщенную речь, но Apple не облегчает жизнь новым разработчикам.
И поверьте мне, предоставленные мной ссылки — не единственная документация, которую я читаю. Ни в одной из просматриваемых мной статей Apple об этом ничего не упоминалось.
Первая ссылка приведет вас к подробной информации.
По первой ссылке нет. Можете ли вы указать мне, где в этой ссылке сначала написано «запрашивать при использовании»?
В вашей ссылке есть ссылка «для получения дополнительной информации», а там есть жирный прямоугольник с надписью «если у вас есть, когда вы используете, вы всегда можете запросить».
Вы имеете в виду примечание, в котором говорится: «Если ваше приложение запрашивает и получает авторизацию «При использовании», вы можете сделать отдельный запрос на авторизацию «Всегда» позже?»
Я не думаю, что кто-то взглянет на предложение и интерпретирует его как «При использовании является обязательным условием». На это ответил @yo1995 ниже.
Я думаю, что документация Apple нуждается в улучшении, так как вам нужно просмотреть несколько страниц, чтобы найти правильный способ сделать это. Но за этим может быть трудно следовать намеренно.
Вы должны вызвать этот метод или метод requestWhenInUseAuthorization(), прежде чем ваше приложение сможет получать информацию о местоположении. Чтобы вызвать этот метод, у вас должны быть ключи
NSLocationAlwaysUsageDescription
иNSLocationWhenInUseUsageDescription
в файле Info.plist вашего приложения.
Подумайте об этом так: авторизация «При использовании» является базовым вариантом для всех авторизаций. Вы должны представить это предупреждение в качестве первого шага для получения разрешений на определение местоположения.
Более того, даже если вы запросили и получили разрешение «Всегда», iOS все равно будет предлагать пользователю в случайное время в будущем предупреждение «Изменить на только во время использования».
Итак, вы поняли… Apple просто не хочет, чтобы вы использовали «Всегда».
Приходится звонить сначала при использовании, а потом всегда