Flutter-geolocator: iOS не запрашивает разрешения на местоположение

Созданный на 25 янв. 2019  ·  15Комментарии  ·  Источник: Baseflow/flutter-geolocator

🐛 Отчет об ошибке


Симулятор iOS не запрашивает разрешение на местоположение. Похоже, устройство просто пропускает или "зависает" с этим. Когда я пытаюсь получить geolocator.getCurrentPosition вручную (нажав кнопку), он возвращает null . На Android все работает как положено. Я проверил разрешение местоположения с помощью geolocator.checkGeolocationPermissionStatus (), и это
GeolocationStatus.unknown .

Ожидаемое поведение

Симулятор iOS должен запрашивать разрешения пользователя для службы определения местоположения.

Шаги размножения

Конфигурация

Версия: 2.1.1

Платформа:

  • [12.1]: iphone: iOS

Самый полезный комментарий

@dstuff @kika @JStuve @StephanCassel ,
Я починил это! Я использовал в Info.plist это разрешение NSLocationAlwaysUsageDescription вместе с NSLocationWhenInUseUsageDescription. Но приложение настроено на iOS 8, Flutter по умолчанию. Но NSLocationAlwaysUsageDescription следует использовать только с iOS 10+. Это испортило запрос разрешения в приложении iOS. Я удалил, и это сработало, спросил разрешения, и я смог узнать местоположение. Надеюсь, это тоже поможет вам, ребята.

Все 15 Комментарий

Я заметил, что когда приложение впервые устанавливается и обращается к службе определения местоположения, система выдает диалоговое окно с запросом разрешения, и в то же время checkPermissionStatus() возвращает unknown . Если пользователь разрешает доступ, приложение может перейти к получению Position .
Должен быть способ дождаться, пока пользователь разрешит или отклонит запрос.

У меня точно такая же проблема. Android работает нормально, но в iOS я добавил NSLocationWhenInUseUsageDescription , однако у меня никогда не запрашивается доступ к разрешениям, поэтому checkGeolocationPermissionsStatus() всегда равно unknown . Это также на физическом устройстве, а также на симуляторе.

Та же проблема в течение нескольких часов. Андроид работает нормально. iOS выдала null.
Я удалил приложение iOS из симулятора и перезапустил. После этого все работает отлично. Пух.
У меня возникла проблема с запуском из-за отсутствия информации в подфайле. Это могло вызвать проблему.

То же самое и здесь. Удалено приложение с устройства и симулятора, переустановлено, тоже самое.
При попытке определить местоположение появилось следующее исключение: ERROR_ALREADY_REQUESTING_PERMISSIONS

@dstuff @kika @JStuve @StephanCassel ,
Я починил это! Я использовал в Info.plist это разрешение NSLocationAlwaysUsageDescription вместе с NSLocationWhenInUseUsageDescription. Но приложение настроено на iOS 8, Flutter по умолчанию. Но NSLocationAlwaysUsageDescription следует использовать только с iOS 10+. Это испортило запрос разрешения в приложении iOS. Я удалил, и это сработало, спросил разрешения, и я смог узнать местоположение. Надеюсь, это тоже поможет вам, ребята.

@cetorres Наконец-то получил! Я внес рекомендованное вами изменение, вдобавок к тому, что я также звонил checkGeolocationPermissionStatus перед getCurrentPosition поэтому мой запрос разрешений не запускался!

Спасибо! : пиво:

версия: 3.0.0 iOS также не запрашивает разрешения на доступ.

Из отладки в Xcode оказалось, что NSLocationAlwaysAndWhenInUseUsageDescription также требуется. (Имея только NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription во Flutter ничего не происходит)

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

Большое спасибо @cetorres! Я на самом деле нацелен на iOS 10+, но мне все равно пришлось удалить NSLocationAlwaysUsageDescription чтобы заставить его работать. Мое приложение не нуждается в информации о местоположении, когда оно не используется, так что этого достаточно.

Сумасшедший! Apple одобрила мое приложение для TestFlight обычным ...

Теперь вы можете использовать эту сборку для тестирования TestFlight или отправить ее в App Store.

но также отправил мне это:

Мы обнаружили одну или несколько проблем с недавней доставкой вашего приложения, [отредактировано] 1.0.0 (12). Ваша доставка прошла успешно, но вы можете исправить следующие проблемы в следующей доставке:

ITMS-90683: отсутствует строка цели в Info.plist - код вашего приложения ссылается на один или несколько API-интерфейсов, которые обращаются к конфиденциальным данным пользователя. Файл Info.plist приложения должен содержать ключ NSLocationAlwaysUsageDescription с ориентированной на пользователя целевой строкой, четко и полностью объясняющей, почему вашему приложению нужны данные. Начиная с весны 2019 года, все приложения, представленные в App Store, которые имеют доступ к пользовательским данным, должны включать целевую строку. Если вы используете внешние библиотеки или SDK, они могут ссылаться на API, для которых требуется строка назначения. Хотя ваше приложение может не использовать эти API, строка назначения все равно необходима. Вы можете связаться с разработчиком библиотеки или SDK и попросить их выпустить версию своего кода, не содержащую API. Узнайте больше (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

Похоже, я все еще хожу здесь на натянутой веревке. Я не могу обновить плагин, потому что я не хочу прямо сейчас преодолевать препятствие AndroidX ...

Что вы предлагаете, ребята? Просто проигнорируйте сообщение «Мы определили проблемы»?

Обновление: добавление всех трех ниже в info.plist сработало для меня. Apple тоже довольна.

NSLocationWhenInUseUsageDescription

NSLocationAlwaysAndWhenInUseUsageDescription

Спасибо за подсказку, @vejmartin

@kbrmimbyl Ты спасатель. Мне не хватало ключа «NSLocationAlwaysAndWhenInUseUsageDescription» в Info.plist, и это вызывало те проблемы !!

Интересно для всех, кто изменил info.plist в AndroidStudio, а не в XCode: для меня это сработало, когда я удалил NSLocationAlwaysAndWhenInUseUsageDescription и вместо этого выбрал соответствующий параметр «Конфиденциальность - Местоположение всегда и при использовании описания использования» в Xcode. По какой-то причине другие были уже отформатированы таким образом, а этот - нет. Я столкнулся с теми же проблемами, о которых говорилось выше, но onError это ничего мне не дало. Асинхронный режим просто ждал и никогда не выполнялся. И затем, если вы выполните hotReload, вы получите ERROR_ALREADY_REQUESTING_PERMISSIONS, потому что он все еще ожидает ввода для этого запроса разрешения.
Ориентация на IOS11, на Android все работало нормально. Теперь это работает и на IOS.

У меня такая же проблема с Flutter Web на устройстве IOS.
приложение не запрашивает диалоговое окно разрешений на IOS, но работает на устройствах Windows и Android.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги