Flutter-geolocator: Geolocator.getCurrentPosition leva muito tempo para retornar à posição no IOS

Criado em 30 ago. 2019  ·  72Comentários  ·  Fonte: Baseflow/flutter-geolocator

getCurrentPosition está funcionando muito bem no Android, mas no IOS demorou muito para ser executado. Você pode Checa-lo? Obrigada
Plataforma:

  • [x]: iphone: iOS
  • []: robô: Android
ios bug duplicate

Comentários muito úteis

@babaosoftware Obrigado por seu esforço. Testei o mesmo problema e cheguei à mesma conclusão que você. Vamos trabalhar nesse problema e mantê-lo informado quando houver uma solução para ele.

Todos 72 comentários

Enfrentando o mesmo problema. Não descobri o que está causando a lentidão até agora, mas usando Última posição conhecida como uma solução temporária para o meu caso ...

verifique se o seu Info.plist tem 3 chaves
NSLocationAlwaysUsageDescription
sua descrição
NSLocationWhenInUseUsageDescription
sua descrição
NSLocationAlwaysAndWhenInUseUsageDescription
sua descrição

Mesmo problema aqui. Tive que fazer o downgrade para a versão 4.0.3 do plugin de geolocalização. Cada versão posterior é muito lenta para responder no iOS.
E sim, @paulobreim tenho todas as strings necessárias em Info.plist, caso contrário não responderia de forma alguma.

Eu uso o plugin de localização para obter a localização atual. Funciona bem no Android e no IOS.

@ hungtran2492 Também estou usando o plugin de localização, é muito mais rápido que isso.

@StijnWoerkom qual é o motivo do fechamento? Este é um bug legítimo que está causando problemas aos desenvolvedores na biblioteca de localização principal do Flutter.

@ollydixon Testei esse problema em vários dispositivos IOS e concluí que o problema era mais com o dispositivo do que com o código. Posso reabrir o problema, mas não vejo nenhum problema ocorrendo com ele.

@StijnWoerkom se ajuda, eu fiz uma demonstração de aplicativo ao vivo com 4 usuários e foi lenta em todos os seus celulares. (Todos iOS). Foi um pouco embaraçoso para mim porque o simulador funciona bem só no aparelho é extremamente lento.

Eu usei outra biblioteca e ela estava bem (Local para Flutter).

A versão 4.0.3 funciona bem. Na verdade, eu fiz downgrade para essa versão no meu aplicativo. Portanto, tem que ser algo na própria biblioteca. Fiz testes com diferentes iPhones, é consistente, então duvido que seja o aparelho.

@ollydixon Obrigado por sua resposta. Lamento pelo seu fracasso com a demonstração. Eu reabri a edição e analisarei isso mais detalhadamente. Você pode me dizer qual versão você estava usando?

@StijnWoerkom não se preocupe, eles sabiam que era uma versão alfa. Era 5.1.3.

Qualquer versão posterior a 4.0.3 tem o problema. Portanto, deve ser algo introduzido no 5.0.0.

@babaosoftware Na versão 5.0.0, convertemos a versão IOS de Swift para Objective-C, reduzindo consideravelmente o tamanho do binário final, além de resolver alguns problemas de compatibilidade com outros plugins baseados em Objective-C.

@StijnWoerkom Não estou questionando a necessidade da conversão, apenas dizendo que ela criou esse problema e dando uma dica de onde alguém pode começar a investigá-lo.

Percebi que você me disse ontem que os problemas começaram com a versão 5.0.0. Estou analisando todos os recursos que adicionamos com a versão para determinar qual é a causa do problema.

Deixe-me sugerir uma alternativa para isolar o problema, se ele realmente existir.
Podemos fazer um pequeno programa apenas com a função geolocator.getCurrentPosition, e todos podem testar esse programa e medir o tempo de execução.
O que você acha?

@paulobreim Eu ia fazer exatamente isso esta noite (horário do leste dos EUA). Vou postar meu resultado assim que os tiver.

Eu fiz o seguinte teste:
A aplicação:
import ' package: flutter / Foundation.dart ';
import ' package: geolocator / geolocator.dart ';
void main () {
DateTime start = DateTime.now ();
getCurrentPosition (). then ((pos) {
DateTime end = DateTime.now ();
debugPrint ("intervalo de tempo = $ {end.difference (start) .inMilliseconds} ms");
});
}
FuturogetCurrentPosition () async {
retorno aguarda Geolocator (). getCurrentPosition ();
}

em pubspec.yaml eu tenho
Geolocator: ^ 4.0.3 # Não atualize - é muito lento para responder na inicialização.
para o primeiro teste, e
Geolocator: ^ 5.1.4
para o segundo teste.
Eu testei usando um iPhone 6S, mas antes também usava dispositivos mais novos, então não acho que o dispositivo faça diferença.
O primeiro teste, com a versão 4.0.3, mostrou um tempo de resposta de cerca de 100ms
O segundo teste, com a versão 5.1.4. mostrou um tempo de resposta de cerca de 10 s - ou seja, segundos, não ms
Ai está.

Estou tentando testar no meu Motorola Z2 Play e em um iPhone, mas recebi o erro abaixo e não sei o que fazer.

Lançando lib / main.dart no Android SDK desenvolvido para x86 no modo de depuração ...
Inicializando gradle ...
Resolvendo dependências ...
Executando tarefa Gradle 'assembleDebug' ...

FALHA: a compilação falhou com uma exceção.

  • O que deu errado:
    A execução falhou para a tarefa ': app: preDebugBuild'.
    > Dependência do Android 'androidx. core: core 'tem uma versão diferente para o classpath de compilação (1.0.0) e runtime (1.0.2). Você deve definir manualmente a mesma versão por meio de DependencyResolution

Sei que não existe relação com o geolocalização, mas não sei como consertar.

'androidx. core: core 'tem uma versão diferente para o classpath de compilação (1.0.0) e runtime (1.0.2)

Verifique isto:
https://github.com/flutter/flutter/issues/27254

Aqui está meu teste para Android.
Coloquei um floatingActionButton e apertei 10 vezes

PRIMEIRO TESTE de geolocalização: ^ 4.0.3
Lançando lib / main.dart no Moto Z2 Play no modo de depuração ...
Inicializando gradle ...
Resolvendo dependências ...
Executando tarefa Gradle 'assembleDebug' ...
Construído build / app / outputs / apk / debug / app-debug.apk.
Sincronizando arquivos com o dispositivo Moto Z2 Play ...
I / flutter (11197): intervalo de tempo = 1006 ms
I / flutter (11197): intervalo de tempo = 1626 ms
I / flutter (11197): intervalo de tempo = 965 ms
I / flutter (11197): intervalo de tempo = 6024 ms
I / flutter (11197): intervalo de tempo = 991 ms
I / flutter (11197): intervalo de tempo = 971 ms
I / flutter (11197): intervalo de tempo = 6022 ms
I / zigoto (11197): Faça a coleta de cache de código parcial, código = 62 KB, dados = 51 KB
I / zigoto (11197): Após a coleta do cache de código, código = 62 KB, dados = 51 KB
I / zygote (11197): Aumentando a capacidade do cache de código para 256 KB
I / flutter (11197): intervalo de tempo = 7866 ms
I / flutter (11197): intervalo de tempo = 940 ms
I / flutter (11197): intervalo de tempo = 6091 ms

LOCALIZADOR SEGUNDO TESTE: ^ 5.1.4
Lançando lib / main.dart no Moto Z2 Play no modo de depuração ...
Inicializando gradle ...
Resolvendo dependências ...
Executando tarefa Gradle 'assembleDebug' ...
Construído build / app / outputs / apk / debug / app-debug.apk.
Sincronizando arquivos com o dispositivo Moto Z2 Play ...
I / flutter (11471): intervalo de tempo = 1043 ms
I / flutter (11471): intervalo de tempo = 5927 ms
I / flutter (11471): intervalo de tempo = 8.876 ms
I / flutter (11471): intervalo de tempo = 1052 ms
I / flutter (11471): intervalo de tempo = 5987 ms
I / flutter (11471): intervalo de tempo = 6316 ms
I / flutter (11471): intervalo de tempo = 5948 ms
I / zigoto (11471): Faça coleta de cache de código parcial, código = 62 KB, dados = 50 KB
I / zigoto (11471): Após a coleta de cache de código, código = 62 KB, dados = 50 KB
I / zygote (11471): Aumentando a capacidade do cache de código para 256 KB
I / flutter (11471): intervalo de tempo = 934 ms
I / flutter (11471): intervalo de tempo = 6012 ms
I / flutter (11471): intervalo de tempo = 954 ms

TERCEIRO TESTE de geolocalização: ^ 5.1.4
(WHITOUT aguarda no geolocalização pressionando o botão 10 vezes rápido
Lançando lib / main.dart no Moto Z2 Play no modo de depuração ...
Inicializando gradle ...
Resolvendo dependências ...
Executando tarefa Gradle 'assembleDebug' ...
Construído build / app / outputs / apk / debug / app-debug.apk.
Instalando build / app / outputs / apk / app.apk ...
Sincronizando arquivos com o dispositivo Moto Z2 Play ...
I / flutter (16122): intervalo de tempo = 1020 ms
I / flutter (16122): intervalo de tempo = 159 ms
I / flutter (16122): intervalo de tempo = 584 ms
I / flutter (16122): intervalo de tempo = 544 ms
I / flutter (16122): intervalo de tempo = 99 ms
I / flutter (16122): intervalo de tempo = 536 ms
I / flutter (16122): intervalo de tempo = 82 ms
I / zigoto (16122): Faça coleta de cache de código parcial, código = 62 KB, dados = 50 KB
I / zigoto (16122): Após a coleta do cache de código, código = 62 KB, dados = 50 KB
I / zygote (16122): Aumentando a capacidade do cache de código para 256 KB
I / flutter (16122): intervalo de tempo = 504 ms
I / flutter (16122): intervalo de tempo = 1381 ms
I / flutter (16122): intervalo de tempo = 946 ms

Embora eu não tenha verificado o problema no Android, como afirma o título, esse problema foi aberto para iOS. No entanto, seus testes mostram resultados bastante inconsistentes, e não tenho certeza do que o terceiro teste faz sem esperar na chamada do geolocalização. Talvez postar o código do seu aplicativo esclareça isso.
De qualquer forma, fico com a versão 4.0.3 da biblioteca por enquanto. Na verdade, lancei meu aplicativo na Apple Store recentemente. Você pode querer dar uma olhada em
http://apps.apple.com/us/app/apple-store/id1469322424

Aqui está meu teste para IOS 12.4.4 iPhone 6

PRIMEIRO TESTE de geolocalização: ^ 4.0.3
Lançando lib / main.dart no iPhone PCB no modo de depuração ...
Assinando app iOS para implantação de dispositivo usando identidade de desenvolvedor: "Desenvolvedor iPhone: Paulo Breim (Y34R2HBJ59)"
Executando instalação de pod ...
Executando Xcode build ...
Compilação do Xcode concluída. 23,7s
Instalando e lançando ...
Sincronizando arquivos para o dispositivo iPhone PCB ...
flutter: intervalo de tempo = 230 ms
flutter: intervalo de tempo = 92 ms
flutter: intervalo de tempo = 74 ms
flutter: intervalo de tempo = 80 ms
flutter: intervalo de tempo = 95 ms
flutter: intervalo de tempo = 87 ms
vibração: intervalo de tempo = 199 ms
flutter: intervalo de tempo = 58 ms
flutter: intervalo de tempo = 73 ms
vibração: intervalo de tempo = 70 ms

LOCALIZADOR SEGUNDO TESTE: ^ 5.1.4
Lançando lib / main.dart no iPhone PCB no modo de depuração ...
Assinando app iOS para implantação de dispositivo usando identidade de desenvolvedor: "Desenvolvedor iPhone: Paulo Breim (Y34R2HBJ59)"
Executando instalação de pod ...
Executando Xcode build ...
Compilação do Xcode concluída. 22,6s
Instalando e lançando ...
Sincronizando arquivos para o dispositivo iPhone PCB ...
flutter: intervalo de tempo = 12.383 ms
flutter: intervalo de tempo = 10033 ms
flutter: intervalo de tempo = 10027 ms
flutter: intervalo de tempo = 10026 ms
flutter: intervalo de tempo = 10031 ms
flutter: intervalo de tempo = 10029 ms
flutter: intervalo de tempo = 10032 ms
flutter: intervalo de tempo = 10032 ms
flutter: intervalo de tempo = 10028 ms
flutter: intervalo de tempo = 10029 ms

babaosoftware, diga-me se precisar de mais testes

@paulobreim obrigado pelo seu esforço. Aparentemente, confirma o que dissemos o tempo todo, e os resultados são consistentes. As versões da biblioteca de geolocalização, começando com 5.0.0, têm um tempo de resposta inaceitável de cerca de 10 segundos para chamadas para getCurrentPosition na plataforma iOS.
Os resultados no Android são inconsistentes, mas alguns mostram tempos de resposta de mais de 8 segundos, o que também é preocupante.
@StijnWoerkom Acho que há evidências suficientes de que algo está muito errado com a atualização da biblioteca e requer algum esforço para isolar e consertar.

@babaosoftware Obrigado por seu esforço. Testei o mesmo problema e cheguei à mesma conclusão que você. Vamos trabalhar nesse problema e mantê-lo informado quando houver uma solução para ele.

O mesmo está acontecendo aqui no iOS 13.1.3 iPhone XR com a versão mais recente do GeoLocator. Demora entre 8 a 10 segundos para obter a posição atual

Para aqueles que têm problemas com a lentidão de getPosition no iOS (por exemplo, leva 10 + s para obter informações de posição), você pode usar este pacote alternativo como foi dito antes no tópico anterior.

https://github.com/Lyokone/flutterlocation

Ele carrega informações de posição extremamente rápido, tanto no Android quanto no iOS. (<1s).

Estou tendo o mesmo atraso com a versão mais recente. Há algum problema / desvantagem em manter a versão 4.0.3?

Concordo com @cielo , testei este pacote e o pacote de localização [ link ] e a diferença de velocidade é aparente. Porém, este pacote oferece mais recursos e espero que esse bug no atraso seja corrigido (para mim é inconsistente).

Só quero acrescentar que ainda estou sentindo essa lentidão também. Funciona bem no emulador, mas leva mais de 10 segundos no dispositivo Physical Iphone 8 Plus.

efetivamente a versão 4.0.3 funciona muito bem. Minha experiência em dispositivos ios físicos, com a versão 5.2.0, demorou muito para localizar a localização do dispositivo, baixando para 4.0.3 o problema de resolução

Olá, estou tendo este problema no Android

meu código é tão simples quanto. Position position = await _geoLocator.getCurrentPosition();

Estou usando um Google Pixel 3A

eu também :(
estou usando ^ 5.1.5
getCurrentPosition () tão lento em Android, IOS

eu também
Iam usando ^ 5.3.0
IOS 12.4 Iphone 5s.

Eu tenho o mesmo problema, no iOS 13.4 beta iPhone XR
Funciona bem em qualquer dispositivo de sistema operacional Android.

mesmo problema, funciona bem no dispositivo virtual, mas com atraso de 10 segundos no dispositivo físico

Enfrentando o mesmo problema no meu iPhone 7, iOS 13.4

Mesmo problema no iPhone 7 e IPhone X, IOS 13

Olá, mesmo problema em um dispositivo iPhone X real, iOS 13

Nosso tempo de inicialização foi de mais de 10 segundos por causa desse problema, voltando para o 4.0.3 funciona

O mesmo aqui, iPhone 5s iOS 12.4.

Também no iPhone 6s iOS 13.4

Também estou enfrentando esse problema. iPhone 6s iOS 13.4

O mesmo problema em um dispositivo físico, iPhone 8 iOS 13.4. getLastKnownLocation funciona bem.

+1

O mesmo aqui usando a versão do ^5.3.1 Geolocator no iPhone Xs e iOS 13.3. Eu fiz downgrade para 4.0.3 e é muito rápido! 🚀

Tendo os mesmos resultados lentamente, no simulador IOS funciona perfeitamente, então eu tentei no telefone real e leva cerca de 10 segundos em cada endereço diferente, andei por algumas casas e a primeira vez é sempre lento, se você tentar novamente carrega Rápido.

Eu também tentei 4.0.3 e está funcionando bem, mas vejo muitas correções de 4.0.3 para ^ 5.3.1. algum plano para consertar isso no branch principal?

Notei que 4.0.3 não é tão preciso quanto 5.3.1

Eu também tive esse mesmo problema. O downgrade para 4.0.3 resolveu o problema para mim. Funcionou bem no simulador ios, mas estava demorando muito no meu dispositivo ios físico (iPhone SE 2ª Geração).

Como esse problema não ganhou mais força? Certamente este é um problema de quebra do plugin em nível de produção. Ele simplesmente não pode ser usado em um ambiente ativo após a v4.0.3.

Reproduz aqui também, iPhone 8.
A primeira aquisição leva mais de 20 segundos no hardware real em 5.3.1.
Mesmo hardware, mesmo local, a primeira aquisição é de ~ 2 segundos no 4.0.3.

Tendo os mesmos resultados lentamente, no simulador IOS funciona perfeitamente, então eu tentei no telefone real e leva cerca de 10 segundos em cada endereço diferente, andei por algumas casas e a primeira vez é sempre lento, se você tentar novamente carrega Rápido.

Cara, usei a versão 4.0.3 para melhor resultado no simulador e dispositivo iOS (iPhone 6s - 8)

Eu tenho o mesmo problema e mudar para 4.0.3 não foi simples porque eu teria que voltar atrás e já atualizei para o Androidx. Em vez disso, usei o plug-in de localização de flutter, muito mais rápido.

Semelhante ao que outras pessoas estão dizendo, estou vendo atrasos de aproximadamente 10 segundos (quase no ponto) em um dispositivo iOS físico, mas nenhum no simulador. Essa lentidão foi observada em vários dispositivos de minha equipe.

Existe alguma intenção de implementar uma correção para versões mais recentes?

você poderia tentar alterar a precisão? este funcionou para mim:
aguarde Geolocator (). getCurrentPosition (desejadoAccuracy: LocationAccuracy.medium)

aguarde Geolocator (). getCurrentPosition (desejadoAccuracy: LocationAccuracy.medium)
trabalhou para mim.

Eu estava em 5.3.2 + 2 e notei que este plugin era muito mais lento do que o plugin de localização. Com base na recomendação aqui, fiz downgrade para 4.0.3 e a velocidade melhorou muito.

Também tive o mesmo problema acima, ao executar no Simulador v11.5 no mac, a correção abaixo também funciona para o GeoLocation mais recente, v ^ 5.3.2 + 2 no momento em que este artigo foi escrito.

A localização do dispositivo IOS do simulador não é definida por padrão, o que causa a exceção. Isso pode ser definido clicando em na barra de menu superior.

Recursos -> Localização -> Selecione uma opção

também teve que fazer o downgrade para 4.03 devido ao desempenho em dispositivos iOS reais.

O mesmo aqui, extremamente lento.

Eu tive o mesmo problema ao usar a versão 5.3.1.
Demorou cerca de 10 segundos para obter a localização em quase todas as versões do iPhone ou iPad.
Alterar o LocationAccuracy (de melhor para médio) parece resolver o problema.

mesmo aqui, testado em vários iPhones de 6S e superior, versão 5.3.2 - leva de 5 a 10 segundos para obter a localização

Mesmo aqui, o iPhone 8 leva 5 segundos para determinar a localização

Talvez minha solução estivesse escondida no texto:
Quando mudei o LocationAccuracy (de melhor para médio), encurte o atraso para menos de um segundo, e às vezes a resposta era instantânea (pelo menos em todas as máquinas que testei).
Observe que a precisão de localização de "boa" não era boa o suficiente.

Está demorando até 100 segundos (segundos) no meu iPhoneSE para obter a posição atual. Às vezes leva menos de um segundo e da próxima vez leva até 100. Também tentei usar o pacote Location, mas o mesmo problema persistiu. Não consigo fazer o downgrade para 4.0.4 porque outro pacote que estou usando depende de versões superiores. :(

Estamos trabalhando muito em uma nova versão que deve resolver esses problemas. Veja também a edição # 430 com mais detalhes sobre o andamento.

Recentemente, tive este problema ao usar o geolocalização: ^ 5.3.1
para corrigir, atualizei para o geolocalização: ^ 5.3.2 + 2
definir :
compileSdkVersion 28

e eventualmente fez
atualização de vibração

isso parece ter corrigido o problema.

aguarde Geolocator (). getCurrentPosition (desejadoAccuracy: LocationAccuracy.medium)
trabalhou para mim.

A classe Geolocator () agora está obsoleta na versão mais recente de ^ 6.0.0, como devo usar PlaceMarker e placeFromCoordinate

@mannnish , a funcionalidade de geocodificação foi movida para seu próprio plugin (dedicado) chamado geocodificação .

@mannnish , a funcionalidade de geocodificação foi movida para seu próprio plugin (dedicado) chamado geocodificação .

Obrigado funcionou

Eu atualizei para a versão mais recente, resolvi o problema para mim 👍👍👍

Eu atualizei para a versão mais recente, resolvi o problema para mim 👍👍👍

De fato, atualizar para ^6.1.14 também me ajudou.

Eu atualizei para a versão mais recente, resolvi o problema para mim 👍👍👍

De fato, atualizar para ^6.1.14 também me ajudou.

não está funcionando para mim ................. diga as etapas que preciso seguir

Eu atualizei para a versão mais recente, resolvi o problema para mim 👍👍👍

De fato, atualizar para ^6.1.14 também me ajudou.

não está funcionando para mim ................. diga as etapas que preciso seguir

Hm, acabei de atualizar meu pubspec.yaml, talvez você também precise excluir pubpec.lock?

Agora é lento de novo lol (pelo menos na web)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

hectorAguero picture hectorAguero  ·  5Comentários

samo92 picture samo92  ·  6Comentários

dark-chocolate picture dark-chocolate  ·  3Comentários

shrishti08 picture shrishti08  ·  3Comentários

joesnarky picture joesnarky  ·  3Comentários