Flutter-geolocator: geolocator.getCurrentPosition долго возвращает позицию на IOS

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

getCurrentPosition отлично работает на Android, но на IOS требовалось очень много времени для выполнения. Вы можете проверить это? Спасибо
Платформа:

  • [x]: iphone: iOS
  • []: robot: Android
ios bug duplicate

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

@babaosoftware Спасибо за ваши усилия. Я проверил ту же проблему и пришел к такому же выводу, что и вы. Мы будем работать над этой проблемой и будем держать вас в курсе, когда будет решение этой проблемы.

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

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

проверьте, есть ли в вашем Info.plist 3 ключа
NSLocationAlwaysUsageDescription
ваше описание
NSLocationWhenInUseUsageDescription
ваше описание
NSLocationAlwaysAndWhenInUseUsageDescription
ваше описание

Здесь та же проблема. Пришлось перейти на версию плагина геолокатора 4.0.3. Каждая последующая версия очень медленно реагирует в iOS.
И да, @paulobreim У меня есть все необходимые строки в Info.plist, иначе он вообще не ответил бы.

Я использую плагин Location для получения текущего местоположения. Он отлично работает как на Android, так и на IOS.

@ hungtran2492 Я тоже использую плагин Location, он намного быстрее этого.

@StijnWoerkom в чем причина закрытия? Это законная ошибка, которая вызывает проблемы у разработчиков в основной библиотеке для Flutter.

@ollydixon Я протестировал эту проблему на нескольких устройствах IOS и пришел к выводу, что проблема больше

@StijnWoerkom, если это поможет, я сделал живую демонстрацию приложения с 4 пользователями, и она была медленной на всех их мобильных устройствах. (Все iOS). Меня немного смутило, потому что симулятор работает нормально, только на устройстве он очень медленный.

Я использовал другую библиотеку, и это было нормально (Местоположение для Flutter).

Версия 4.0.3 работает нормально. Я фактически перешел на эту версию своего приложения. Так что это должно быть что-то в самой библиотеке. Делал тесты с разными айфонами, все согласованно, поэтому сомневаюсь, что дело в устройстве.

@ollydixon Спасибо за ваш ответ. Прошу прощения за вашу неудачу с демонстрацией. Я повторно открыл проблему и займусь этим дальше. Можете сказать, какую версию вы использовали?

@StijnWoerkom не беспокойтесь, они знали, что это альфа-сборка. Была 5.1.3.

Проблема возникает в любой версии после 4.0.3. Так что это должно быть что-то введенное в 5.0.0.

@babaosoftware В версии 5.0.0 мы преобразовали версию IOS из Swift в Objective-C, значительно уменьшив размер финального двоичного файла, а также решив некоторые проблемы совместимости с другими подключаемыми модулями на основе Objective-C.

@StijnWoerkom Я не сомневаюсь в необходимости преобразования, просто говорю, что оно создало эту проблему, и даю намек на то, где кто-то может начать изучать это.

Обратил внимание, вчера ты мне сказал, что проблемы начались с версии 5.0.0. Я изучаю все функции, которые мы добавили в эту версию, чтобы определить причину проблемы.

Позвольте предложить альтернативу изоляции проблемы, если она действительно существует.
Мы можем создать небольшую программу только с функцией geolocator.getCurrentPosition, и каждый может протестировать эту программу и измерить время ее выполнения.
что ты думаешь?

@paulobreim Я собирался сделать именно это сегодня вечером (по восточному времени США). Я опубликую свой результат, как только они будут у меня.

Я сделал следующий тест:
Приложение:
import ' package: flutter / foundation.dart ';
import ' package: geolocator / geolocator.dart ';
пустая функция(){
DateTime start = DateTime.now ();
getCurrentPosition (). then ((pos) {
DateTime end = DateTime.now ();
debugPrint ("промежуток времени = $ {end.difference (начало) .inMilliseconds} мс");
});
}
БудущееgetCurrentPosition () async {
return await Geolocator (). getCurrentPosition ();
}

в pubspec.yaml у меня есть
geolocator: ^ 4.0.3 # Не обновлять - очень медленно реагирует при запуске.
для первого теста, и
геолокатор: ^ 5.1.4
для второго теста.
Я тестировал iPhone 6S, но раньше я использовал и более новые устройства, поэтому я не думаю, что это устройство имеет значение.
Первый тест с версией 4.0.3 показал время отклика около 100 мс.
Второй тест, с версией 5.1.4. показал время отклика около 10 с - то есть секунды, а не мс
Вот и все.

Я пытаюсь протестировать его на своем Motorola Z2 Play и на iPhone, но получил ошибку ниже и не знаю, что делать.

Запуск lib / main.dart на Android SDK, созданном для x86, в режиме отладки ...
Инициализация gradle ...
Устранение зависимостей ...
Выполнение задачи Gradle 'assemblyDebug' ...

ОШИБКА: сбой при сборке за исключением.

  • Что пошло не так:
    Не удалось выполнить задачу ': app: preDebugBuild'.
    > Зависимость от Android 'androidx. core: core 'имеет разные версии для пути к классам компиляции (1.0.0) и времени выполнения (1.0.2). Вы должны вручную установить ту же версию через DependencyResolution

Я знаю, что нет никакой связи с геолокатором, но не знаю, как это исправить.

'androidx. core: core 'имеет разные версии для пути к классам компиляции (1.0.0) и времени выполнения (1.0.2)

Проверь это:
https://github.com/flutter/flutter/issues/27254

Вот мой тест для Android.
Я поставил FloatingActionButton и нажал 10 раз

ПЕРВЫЙ ТЕСТ геолокатора: ^ 4.0.3
Запуск lib / main.dart на Moto Z2 Play в режиме отладки ...
Инициализация gradle ...
Устранение зависимостей ...
Выполнение задачи Gradle 'assemblyDebug' ...
Встроенная сборка / приложение / выходы / apk / debug / app-debug.apk.
Синхронизация файлов с устройством Moto Z2 Play ...
I / flutter (11197): временной интервал = 1006 мс
I / flutter (11197): временной интервал = 1626 мс
I / flutter (11197): временной интервал = 965 мс
I / flutter (11197): временной интервал = 6024 мс
I / flutter (11197): временной интервал = 991 мс
I / flutter (11197): временной интервал = 971 мс
I / flutter (11197): временной интервал = 6022 мс
I / zygote (11197): сбор частичного кеша кода, код = 62 КБ, данные = 51 КБ
I / zygote (11197): после сбора кеша кода, код = 62 КБ, данные = 51 КБ
I / zygote (11197): увеличение емкости кэша кода до 256 КБ
I / flutter (11197): временной интервал = 7866 мс
I / flutter (11197): временной интервал = 940 мс
I / flutter (11197): временной интервал = 6091 мс

ВТОРОЙ ТЕСТ геолокатора: ^ 5.1.4
Запуск lib / main.dart на Moto Z2 Play в режиме отладки ...
Инициализация gradle ...
Устранение зависимостей ...
Выполнение задачи Gradle 'assemblyDebug' ...
Встроенная сборка / приложение / выходы / apk / debug / app-debug.apk.
Синхронизация файлов с устройством Moto Z2 Play ...
I / flutter (11471): временной интервал = 1043 мс
I / flutter (11471): временной интервал = 5927 мс
I / flutter (11471): временной интервал = 8876 мс
I / flutter (11471): временной интервал = 1052 мс
I / flutter (11471): временной интервал = 5987 мс
I / flutter (11471): временной интервал = 6316 мс
I / flutter (11471): временной интервал = 5948 мс
I / zygote (11471): выполнить частичный сбор кеша кода, код = 62 КБ, данные = 50 КБ
I / zygote (11471): после сбора кеша кода, код = 62 КБ, данные = 50 КБ
I / zygote (11471): увеличение емкости кэша кода до 256 КБ
I / flutter (11471): временной интервал = 934 мс
I / flutter (11471): временной интервал = 6012 мс
I / flutter (11471): временной интервал = 954 мс

ТРЕТИЙ ТЕСТ геолокатора: ^ 5.1.4
(БЕЛЫЙ ждем в геолокаторе нажав кнопку 10 раз быстро
Запуск lib / main.dart на Moto Z2 Play в режиме отладки ...
Инициализация gradle ...
Устранение зависимостей ...
Выполнение задачи Gradle 'assemblyDebug' ...
Встроенная сборка / приложение / выходы / apk / debug / app-debug.apk.
Установка build / app / output / apk / app.apk ...
Синхронизация файлов с устройством Moto Z2 Play ...
I / flutter (16122): временной интервал = 1020 мс
I / flutter (16122): временной интервал = 159 мс
I / flutter (16122): временной интервал = 584 мс
I / flutter (16122): временной интервал = 544 мс
I / flutter (16122): временной интервал = 99 мс
I / flutter (16122): временной интервал = 536 мс
I / flutter (16122): временной интервал = 82 мс
I / zygote (16122): сбор частичного кеша кода, код = 62 КБ, данные = 50 КБ
I / zygote (16122): после сбора кеша кода, код = 62 КБ, данные = 50 КБ
I / zygote (16122): увеличение емкости кэша кода до 256 КБ
I / flutter (16122): временной интервал = 504 мс
I / flutter (16122): временной интервал = 1381 мс
I / flutter (16122): временной интервал = 946 мс

Хотя я сам не проверял проблему на Android, как указано в заголовке, эта проблема была открыта для iOS. Тем не менее, ваши тесты показывают довольно противоречивые результаты, и я не уверен, что делает третий тест без ожидания вызова геолокатора. Возможно, публикация кода вашего приложения прояснит это.
В любом случае я пока остаюсь с версией библиотеки 4.0.3. Собственно говоря, я недавно выпустил свое приложение в Apple Store. Вы можете проверить это на
http://apps.apple.com/us/app/apple-store/id1469322424

Вот мой тест для IOS 12.4.4 iPhone 6

ПЕРВЫЙ ТЕСТ геолокатора: ^ 4.0.3
Запуск lib / main.dart на плате iPhone в режиме отладки ...
Подписание приложения iOS для развертывания устройства с использованием удостоверения разработчика: «iPhone Developer: Paulo Breim (Y34R2HBJ59)»
Запуск установки модуля ...
Запуск сборки Xcode ...
Сборка Xcode завершена. 23,7 с
Установка и запуск ...
Синхронизация файлов с PCB устройства iPhone ...
флаттер: временной интервал = 230 мс
флаттер: временной интервал = 92 мс
флаттер: временной интервал = 74 мс
флаттер: временной интервал = 80 мс
флаттер: временной интервал = 95 мс
флаттер: временной интервал = 87 мс
флаттер: временной интервал = 199 мс
флаттер: временной интервал = 58 мс
флаттер: временной интервал = 73 мс
флаттер: временной интервал = 70 мс

ВТОРОЙ ТЕСТ геолокатора: ^ 5.1.4
Запуск lib / main.dart на плате iPhone в режиме отладки ...
Подписание приложения iOS для развертывания устройства с использованием удостоверения разработчика: «iPhone Developer: Paulo Breim (Y34R2HBJ59)»
Выполняется установка модуля ...
Запуск сборки Xcode ...
Сборка Xcode завершена. 22,6 с
Установка и запуск ...
Синхронизация файлов с PCB устройства iPhone ...
флаттер: временной интервал = 12383 мс
флаттер: временной интервал = 10033 мс
флаттер: временной интервал = 10027 мс
флаттер: временной интервал = 10026 мс
флаттер: временной интервал = 10031 мс
флаттер: временной интервал = 10029 мс
флаттер: временной интервал = 10032 мс
флаттер: временной интервал = 10032 мс
флаттер: временной интервал = 10028 мс
флаттер: временной интервал = 10029 мс

babaosoftware, дайте мне знать, если вам нужны дополнительные тесты

@paulobreim, спасибо за ваши усилия. Очевидно, подтверждает то, что мы говорили все время, и результаты стабильны. Версии библиотеки геолокатора, начиная с 5.0.0, имеют недопустимое время отклика около 10 секунд на вызовы getCurrentPosition на платформе iOS.
Результаты на Android противоречивы, но некоторые показывают время отклика более 8 секунд, что также вызывает беспокойство.
@StijnWoerkom Я думаю, что есть достаточно доказательств того, что что-то не так с обновлением библиотеки и требует некоторых усилий для выделения и исправления.

@babaosoftware Спасибо за ваши усилия. Я проверил ту же проблему и пришел к такому же выводу, что и вы. Мы будем работать над этой проблемой и будем держать вас в курсе, когда будет решение этой проблемы.

То же самое происходит здесь на iOS 13.1.3 iPhone XR с последней версией GeoLocator. Чтобы получить текущую позицию, требуется от 8 до 10 секунд.

Для тех из вас, у кого проблемы с медленным getPosition в iOS (например, требуется 10+ секунд для получения информации о местоположении), вы можете использовать этот альтернативный пакет, как было сказано ранее в предыдущем потоке.

https://github.com/Lyokone/flutterlocation

Он очень быстро загружает информацию о местоположении как в Android, так и в iOS. (<1 с).

У меня такое же отставание при использовании последней версии. Есть ли проблемы / недостатки при использовании версии 4.0.3?

Я согласен с @cielo , я тестировал этот пакет и пакет местоположения [ ссылка ], и разница в скорости очевидна. Тем не менее, этот пакет предлагает больше функций, и я надеюсь, что эта задержка будет исправлена ​​(для меня это непоследовательно).

Я просто хочу добавить, что я все еще испытываю эту медлительность. Отлично работает на эмуляторе, но занимает более 10 секунд на физическом устройстве Iphone 8 Plus.

эффективно версия 4.0.3 отлично работает. Мой опыт работы с физическими устройствами ios, с версией 5.2.0, очень задерживал определение местоположения устройства, понижая его до 4.0.3 проблема решения

Привет, у меня проблема на Android

мой код так же прост, как. Position position = await _geoLocator.getCurrentPosition();

Я использую Google Pixel 3A

я тоже :(
я использую ^ 5.1.5
getCurrentPosition () так медленно как Android, IOS

я тоже
я использую ^ 5.3.0
IOS 12.4 Iphone 5s.

У меня такая же проблема, на бета-версии iOS 13.4 iPhone XR
Прекрасно работает на любых устройствах с ОС Android.

та же проблема, отлично работает на виртуальном устройстве, но задержка 10 секунд на физическом устройстве

Возникла та же проблема на моем iPhone 7, iOS 13.4

Та же проблема в iPhone 7 и iPhone X, IOS 13

Здравствуйте, такая же проблема на реальном устройстве iPhone X, iOS 13

Из-за этой проблемы время запуска составляло 10+ секунд, возврат к 4.0.3 работает.

То же самое, iPhone 5s iOS 12.4.

Также в iPhone 6s iOS 13.4

У меня тоже возникла эта проблема. iPhone 6s iOS 13.4

Та же проблема на физическом устройстве, iPhone 8 iOS 13.4. getLastKnownLocation отлично работает.

+1

То же самое и с версией ^5.3.1 Geolocator на iPhone Xs и iOS 13.3. Я понизил его до 4.0.3 и это очень быстро! 🚀

Имея такие же медленные результаты, в симуляторе IOS он работает как шарм, затем я попробовал на реальном телефоне, и на каждый другой адрес уходит около 10 секунд, я ходил по нескольким домам, и в первый раз всегда медленно, если вы повторите попытку, он загрузится быстрый.

Я также пробовал 4.0.3 и работает нормально, но я вижу много исправлений от 4.0.3 до ^ 5.3.1. есть ли планы исправить это в основной ветке?

Я заметил, что 4.0.3 не так точна, как 5.3.1

У меня тоже была такая же проблема. Переход на 4.0.3 решил проблему для меня. Он отлично работал на симуляторе ios, но на моем физическом устройстве ios (iPhone SE 2-го поколения) возрастал.

Как этот вопрос не получил больше внимания? Конечно, это проблема с нарушением работы плагина производственного уровня. Его просто нельзя использовать в реальной среде после версии 4.0.3.

Здесь тоже есть реплики, iPhone 8.
Первое получение занимает более 20 секунд на реальном оборудовании в версии 5.3.1.
То же оборудование, то же место, первое получение занимает ~ 2 секунды на 4.0.3.

Имея такие же медленные результаты, в симуляторе IOS он работает как шарм, затем я попробовал на реальном телефоне, и на каждый другой адрес уходит около 10 секунд, я ходил по нескольким домам, и в первый раз всегда медленно, если вы повторите попытку, он загрузится быстрый.

Парень, я использовал версию 4.0.3 для лучшего результата в симуляторе и устройстве iOS (iPhone 6s - 8)

У меня такая же проблема, и переход на 4.0.3 был непростым, потому что мне пришлось бы отказаться от версий, а я уже обновился до Androidx. Вместо этого я использовал плагин определения местоположения флаттера, намного быстрее.

Подобно тому, что говорят другие, я вижу задержки примерно в 10 секунд (почти сразу) на физическом устройстве iOS, но не в симуляторе. Это замедление наблюдалось на нескольких устройствах в моей команде.

Есть ли какие-либо намерения внести исправление в более новые версии?

не могли бы вы изменить точность? это сработало для меня:
await Geolocator (). getCurrentPosition (желаемая точность: LocationAccuracy.medium)

await Geolocator (). getCurrentPosition (желаемая точность: LocationAccuracy.medium)
работал у меня.

Я был на 5.3.2 + 2 и заметил, что этот плагин был намного медленнее, чем плагин определения местоположения. Основываясь на приведенной здесь рекомендации, я понизил версию до 4.0.3, и скорость была значительно улучшена.

Также была та же проблема, что и выше, при запуске в Simulator v11.5 на Mac, приведенное ниже исправление работает и для последней версии GeoLocation, v ^ 5.3.2 + 2 на момент написания этого.

Местоположение устройства Simulator IOS не установлено по умолчанию, что вызывает исключение, это можно установить, щелкнув в верхней строке меню.

Возможности -> Местоположение -> Выберите вариант

также пришлось понизить версию до 4.03 из-за производительности на реальных устройствах iOS.

То же самое и здесь, очень медленно.

У меня была такая же проблема с версией 5.3.1.
Получение местоположения занимало около 10 секунд практически на любой версии iPhone, iPad.
Изменение LocationAccuracy (с лучшего на среднее), похоже, решает проблему.

То же самое здесь, протестировано на нескольких iPhone от 6S и выше, версия 5.3.2 - определение местоположения занимает 5-10 секунд

То же самое и здесь iPhone 8 определяет местоположение за 5 секунд.

Возможно, мое решение было скрыто в тексте:
Когда я изменил LocationAccuracy (с лучшего на средний), уменьшил задержку менее чем на секунду, и иногда ответ был мгновенным (по крайней мере, на всех машинах, на которых я его тестировал).
Обратите внимание, что LocationAccuracy на "хорошо" было недостаточно.

На моем iPhoneSE требуется до 100 секунд (секунд), чтобы получить текущую позицию. Иногда это занимает меньше секунды, а в следующий раз - до 100. Я также пытался использовать пакет Location, но проблема не исчезла. Я не могу перейти на версию 4.0.4, так как другой пакет, который я использую, зависит от более высоких версий. :(

Мы упорно работаем над новым выпуском, который должен решить эти проблемы. См. Также выпуск №430 с более подробной информацией о его ходе.

недавно возникла эта проблема с использованием геолокатора: ^ 5.3.1
для исправления я обновился до геолокатора: ^ 5.3.2 + 2
набор :
compileSdkVersion 28

и в конце концов сделал
флаттер апгрейд

похоже, проблема устранилась.

await Geolocator (). getCurrentPosition (желаемая точность: LocationAccuracy.medium)
работал у меня.

Класс Geolocator () объявлен устаревшим в последней версии ^ 6.0.0. Как мне использовать PlaceMarker и placeFromCoordinate?

@mannnish , функция геокодирования перенесена в отдельный (выделенный) плагин, называемый геокодированием .

@mannnish , функция геокодирования перенесена в отдельный (выделенный) плагин, называемый геокодированием .

Спасибо сработало

Я обновился до последней версии, проблема исправлена ​​для меня 👍👍👍

Я обновился до последней версии, проблема исправлена ​​для меня 👍👍👍

Действительно, переход на ^6.1.14 мне тоже помог.

Я обновился до последней версии, проблема исправлена ​​для меня 👍👍👍

Действительно, переход на ^6.1.14 мне тоже помог.

это не работает для меня ................. расскажите шаги, которые мне нужно выполнить

Я обновился до последней версии, проблема исправлена ​​для меня 👍👍👍

Действительно, переход на ^6.1.14 мне тоже помог.

это не работает для меня ................. расскажите шаги, которые мне нужно выполнить

хм, я только что обновил свой pubspec.yaml, может, еще и pubpec.lock нужно удалить?

Теперь он снова медленный, лол (по крайней мере, в сети)

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

Смежные вопросы

prasant10050 picture prasant10050  ·  6Комментарии

deisold picture deisold  ·  3Комментарии

shrishti08 picture shrishti08  ·  3Комментарии

samo92 picture samo92  ·  6Комментарии

CNogueira92 picture CNogueira92  ·  3Комментарии