Flutter-geolocator: iOS não pede permissões de localização

Criado em 25 jan. 2019  ·  15Comentários  ·  Fonte: Baseflow/flutter-geolocator

🐛 Relatório de Bug


O simulador iOS não pede permissão de localização. Parece que o dispositivo simplesmente pulou ou 'travou' com isso. Quando tento obter o geolocator.getCurrentPosition manualmente (pressionando o botão), ele retorna nulo . Para Android, tudo funciona conforme o esperado. Verifiquei a permissão de localização usando geolocator.checkGeolocationPermissionStatus () e é
GeolocationStatus.unknown .

Comportamento esperado

O simulador iOS deve solicitar permissões de usuário para o serviço de localização.

Etapas de reprodução

Configuração

Versão: 2.1.1

Plataforma:

  • [12.1]: iphone: iOS

Comentários muito úteis

@dstuff @kika @JStuve @StephanCassel ,
Eu consertei isso! Eu estava usando em Info.plist essa permissão NSLocationAlwaysUsageDescription junto com NSLocationWhenInUseUsageDescription. Mas o aplicativo está definido para o iOS 8, padrão Flutter. Mas NSLocationAlwaysUsageDescription só deve ser usado com iOS 10+. Isso estava atrapalhando o prompt de permissão no aplicativo iOS. Retirei e funcionou, pedi a permissão e consegui a localização. Espero que isso possa ajudar vocês também.

Todos 15 comentários

O que percebi é que quando o aplicativo é instalado pela primeira vez e acessa o serviço de localização, o sistema abre uma caixa de diálogo pedindo permissão e, ao mesmo tempo, checkPermissionStatus() retorna unknown . Se o usuário permitir o acesso, o aplicativo poderá prosseguir para a obtenção de Position .
Deve haver uma maneira de esperar que o usuário permita ou negue a solicitação.

Estou tendo exatamente o mesmo problema. O Android funciona bem, mas no iOS adicionei NSLocationWhenInUseUsageDescription , no entanto, nunca recebo solicitações de permissões de acesso, então checkGeolocationPermissionsStatus() é sempre unknown . Isso também está em um dispositivo físico, bem como no simulador.

O mesmo problema por horas. Android funciona bem. iOS deu nulo.
Removi o aplicativo iOS do simulador e reiniciei. Depois disso, funciona perfeitamente. Puhhh.
Tive alguns problemas de inicialização devido à falta de informações no podfile. Isso pode causar o problema.

Mesma coisa aqui. Removido o aplicativo do dispositivo e simulador, reinstalado, mesma coisa.
Ao tentar obter o local, a seguinte exceção apareceu: ERROR_ALREADY_REQUESTING_PERMISSIONS

@dstuff @kika @JStuve @StephanCassel ,
Eu consertei isso! Eu estava usando em Info.plist essa permissão NSLocationAlwaysUsageDescription junto com NSLocationWhenInUseUsageDescription. Mas o aplicativo está definido para o iOS 8, padrão Flutter. Mas NSLocationAlwaysUsageDescription só deve ser usado com iOS 10+. Isso estava atrapalhando o prompt de permissão no aplicativo iOS. Retirei e funcionou, pedi a permissão e consegui a localização. Espero que isso possa ajudar vocês também.

@cetorres Finalmente entendi! Fiz sua alteração recomendada, além de também estar chamando checkGeolocationPermissionStatus antes de getCurrentPosition portanto, meu prompt de permissões não foi acionado!

Obrigado! : cervejas:

versão: 3.0.0 ios também não solicita permissões de acesso.

Pela depuração no Xcode, parece que NSLocationAlwaysAndWhenInUseUsageDescription também é necessário. (Ter apenas NSLocationAlwaysUsageDescription e NSLocationWhenInUseUsageDescription falha silenciosamente no Flutter)

Mesmo problema, tudo disse que provou, e nada funciona. Não tenho certeza de como resolver isso.

Muito obrigado, @cetorres! Na verdade, estou visando o iOS 10+, mas ainda tive que remover NSLocationAlwaysUsageDescription para fazê-lo funcionar. Meu aplicativo não precisa de informações de localização quando não está em uso, então isso é bom o suficiente.

Louco! A Apple aprovou meu aplicativo para TestFlight com o ...

Agora você pode usar este build para teste TestFlight ou enviá-lo para a App Store.

mas também me enviou isto:

Identificamos um ou mais problemas com uma entrega recente de seu aplicativo, [redigido] 1.0.0 (12). Sua entrega foi bem-sucedida, mas você pode querer corrigir os seguintes problemas em sua próxima entrega:

ITMS-90683: String de propósito ausente em Info.plist - o código do seu aplicativo faz referência a uma ou mais APIs que acessam dados confidenciais do usuário. O arquivo Info.plist do aplicativo deve conter uma chave NSLocationAlwaysUsageDescription com uma string de finalidade voltada para o usuário explicando de forma clara e completa por que seu aplicativo precisa dos dados. A partir da primavera de 2019, todos os aplicativos enviados à App Store que acessam os dados do usuário devem incluir uma string de propósito. Se você estiver usando bibliotecas externas ou SDKs, eles podem fazer referência a APIs que exigem uma string de finalidade. Embora seu aplicativo possa não usar essas APIs, uma string de propósito ainda é necessária. Você pode entrar em contato com o desenvolvedor da biblioteca ou SDK e solicitar que ele libere uma versão de seu código que não contenha as APIs. Saiba mais (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

Parece que ainda estou andando na corda bamba aqui. Não consigo atualizar o plug-in porque não quero ultrapassar o obstáculo do AndroidX agora ...

O que vocês sugerem? Apenas ignorar a mensagem "identificamos problemas"?

Atualização: Adicionar todos os três abaixo em info.plist funcionou para mim. A Apple também está feliz.

NSLocationWhenInUseUsageDescription

NSLocationAlwaysAndWhenInUseUsageDescription

Obrigado pela dica, @vejmartin

@kbrmimbyl Você é um salva-vidas. Estava faltando a chave "NSLocationAlwaysAndWhenInUseUsageDescription" em Info.plist e isso estava causando esses problemas !!

Interessante para quem modificou info.plist no AndroidStudio e não no XCode: para mim, funcionou quando removi "NSLocationAlwaysAndWhenInUseUsageDescription" e, em vez disso, selecionei a "Privacidade - Localização sempre e quando em uso Descrição de uso" correspondente no Xcode. Por alguma razão os outros já estavam formatados assim, mas este não. Eu estava encontrando os mesmos problemas mencionados acima, mas onError não me deu nada. O assíncrono estava apenas esperando e nunca prosseguiu. E então, se você fizer o hotReload, obterá ERROR_ALREADY_REQUESTING_PERMISSIONS, porque ainda está aguardando entrada para essa solicitação de permissão.
Visando o IOS11, no Android funcionou bem. Agora também funciona no IOS.

Estou tendo o mesmo problema com o flutter web no dispositivo IOS.
O aplicativo não exibe nenhuma caixa de diálogo de permissão no IOS, mas funciona em janelas e dispositivos Android

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