Обратные вызовы авторизации CLLocationManager (при отсутствии изменения авторизации)

#ios #cllocationmanager

Вопрос:

Моему приложению всегда нужна авторизация.

Apple заявляет, что если приложение уже имеет авторизацию «Когда использовать», оно может запросить «Всегда»ровно один раз.

Таким образом, появляется следующий рабочий процесс:

  1. Попросите «Когда».
  2. Попросите «Всегда»

Проблемы здесь:

(на 1): Если пользователь выбирает «разрешить один раз», я получаю «Когда использовать» внутренне. Приложению не будет сказано «разрешено только один раз». Шаг 2 завершается беззвучно — без какого-либо обратного вызова или ошибки.

(на 2): Если пользователь выбирает «Хранить только при использовании», обратный вызов вообще не вызывается.

Кто-нибудь знает обходной путь для такого поведения?

(т. е. как мониторинг модально представленных контроллеров представления)

Заранее спасибо!

Ответ №1:

Поскольку приложение становится неактивным всякий раз, когда отображается системное приглашение, вместо ожидания обратных вызовов вы можете сохранить статус авторизации в UserDefaults или в любом другом постоянном хранилище, и всякий раз, когда приложение становится активным, снова проверьте статус и посмотрите, было ли оно изменено.

Комментарии:

1. Извините. Я не могу подтвердить, что это решение работает с использованием SDK iOS 14.5.

2. (Редактирование разрешено только в течение 5 минут, так что вот мое редактирование): Похоже, это не системное приглашение. Я протестировал оба, UIApplicationWillEnterForegroundNotification и UIApplicationDidBecomeActiveNotification. Ничего не работает. Это окно, простой вид или что-то в этом роде.

3. Я также пробовал UIWindowDidResignKeyNotification и UIWindowDidBecomeKeyNotification. Во всплывающем окне, похоже, нет окна. Я почти собираюсь показать клавиатуру и надеюсь, что уведомления с клавиатуры сработают…