Flutter-geolocator: iOS no solicita permisos de ubicación

Creado en 25 ene. 2019  ·  15Comentarios  ·  Fuente: Baseflow/flutter-geolocator

🐛 Informe de error


El simulador de iOS no solicita el permiso de ubicación. Parece que el dispositivo simplemente se salta o se "cuelga" con esto. Cuando intento obtener geolocator.getCurrentPosition manualmente (presionando el botón), devuelve nulo . Para Android, todo funciona como se esperaba. Verifiqué el permiso de ubicación usando geolocator.checkGeolocationPermissionStatus () y es
GeolocationStatus.unknown .

Comportamiento esperado

El simulador de iOS debería solicitar permisos de usuario para el servicio de ubicación.

Pasos de reproducción

Configuración

Versión: 2.1.1

Plataforma:

  • [12.1]: iphone: iOS

Comentario más útil

@dstuff @kika @JStuve @StephanCassel ,
¡Lo arreglé! Estaba usando en Info.plist este permiso NSLocationAlwaysUsageDescription junto con NSLocationWhenInUseUsageDescription. Pero la aplicación está configurada para iOS 8, Flutter predeterminado. Pero NSLocationAlwaysUsageDescription solo debe usarse con iOS 10+. Esto estaba arruinando la solicitud de permiso en la aplicación de iOS. Lo quité y funcionó, pedí permiso y pude obtener la ubicación. Espero que esto también pueda ayudarlos a ustedes.

Todos 15 comentarios

Lo que noté es que cuando la aplicación se instala por primera vez y accede al servicio de ubicación, el sistema muestra un cuadro de diálogo solicitando permiso y, al mismo tiempo, checkPermissionStatus() devuelve unknown . Si el usuario permite el acceso, la aplicación puede proceder a obtener el Position .
Debe haber una forma de esperar a que el usuario permita o rechace la solicitud.

Tengo exactamente el mismo problema. Android funciona bien, pero en iOS agregué NSLocationWhenInUseUsageDescription , sin embargo, nunca me piden permisos de acceso, por lo que checkGeolocationPermissionsStatus() siempre es unknown . Esto también está en un dispositivo físico, así como en el simulador.

Mismo problema durante horas. Android funciona bien. iOS dio nulo.
Eliminé la aplicación iOS del simulador y reinicié. Después de eso, funciona perfecto. Puhhh.
Tuve un problema de inicio debido a que faltaba información en el archivo pod. Puede ser la causa del problema.

Lo mismo aqui. Aplicación eliminada del dispositivo y del simulador, reinstalada, lo mismo.
Al intentar obtener la ubicación, apareció la siguiente excepción: ERROR_ALREADY_REQUESTING_PERMISSIONS

@dstuff @kika @JStuve @StephanCassel ,
¡Lo arreglé! Estaba usando en Info.plist este permiso NSLocationAlwaysUsageDescription junto con NSLocationWhenInUseUsageDescription. Pero la aplicación está configurada para iOS 8, Flutter predeterminado. Pero NSLocationAlwaysUsageDescription solo debe usarse con iOS 10+. Esto estaba arruinando la solicitud de permiso en la aplicación de iOS. Lo quité y funcionó, pedí permiso y pude obtener la ubicación. Espero que esto también pueda ayudarlos a ustedes.

@cetorres ¡ Por fin lo conseguí! Hice el cambio recomendado, además de que también estaba llamando a checkGeolocationPermissionStatus antes de getCurrentPosition así que mi solicitud de permisos no se activaba!

¡Gracias! : cervezas:

versión: 3.0.0 iOS tampoco solicita permisos de acceso.

De la depuración en Xcode, parece que también se requiere NSLocationAlwaysAndWhenInUseUsageDescription . (Tener solo NSLocationAlwaysUsageDescription y NSLocationWhenInUseUsageDescription falla silenciosamente en Flutter)

El mismo problema, todo lo dicho resultó probado, y nada funciona. No estoy seguro de cómo resolverlo.

¡Muchas gracias @cetorres! En realidad, estoy apuntando a iOS 10+, pero aún así tuve que eliminar NSLocationAlwaysUsageDescription para que funcione. Mi aplicación no necesita información de ubicación cuando no está en uso, así que esto es lo suficientemente bueno.

¡Loco! Apple aprobó mi aplicación para TestFlight con el habitual ...

Ahora puede usar esta compilación para las pruebas de TestFlight o enviarla a la App Store.

pero también me envió esto:

Identificamos uno o más problemas con una entrega reciente de su aplicación, [redactado] 1.0.0 (12). Su entrega se realizó correctamente, pero es posible que desee corregir los siguientes problemas en la próxima entrega:

ITMS-90683: Falta la cadena de propósito en Info.plist: el código de su aplicación hace referencia a una o más API que acceden a datos confidenciales del usuario. El archivo Info.plist de la aplicación debe contener una clave NSLocationAlwaysUsageDescription con una cadena de propósito orientada al usuario que explique de forma clara y completa por qué su aplicación necesita los datos. A partir de la primavera de 2019, todas las aplicaciones enviadas a la App Store que acceden a los datos del usuario deben incluir una cadena de propósito. Si usa bibliotecas externas o SDK, es posible que hagan referencia a API que requieran una cadena de propósito. Si bien es posible que su aplicación no use estas API, aún se requiere una cadena de propósito. Puede ponerse en contacto con el desarrollador de la biblioteca o el SDK y solicitarle que publique una versión de su código que no contenga las API. Obtenga más información (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

Parece que todavía estoy caminando sobre una cuerda floja aquí. No puedo actualizar el complemento porque no quiero cruzar el obstáculo de AndroidX en este momento ...

¿Qué sugieren ustedes, chicos? ¿Simplemente ignorar el mensaje "identificamos problemas"?

Actualización: Agregar los tres siguientes en info.plist funcionó para mí. Apple también está feliz.

NSLocationWhenInUseUsageDescription

NSLocationAlwaysAndWhenInUseUsageDescription

Gracias por el consejo, @vejmartin

@kbrmimbyl Eres un salvavidas. ¡¡Me faltaba la clave "NSLocationAlwaysAndWhenInUseUsageDescription" en Info.plist y eso estaba causando esos problemas !!

Interesante para cualquiera que haya modificado info.plist en AndroidStudio y no en XCode: para mí funcionó cuando eliminé "NSLocationAlwaysAndWhenInUseUsageDescription" y en su lugar seleccioné la correspondiente "Privacidad - Ubicación siempre y cuando esté en uso Descripción de uso" en Xcode. Por alguna razón, los otros ya estaban formateados así, pero este no lo estaba. Estaba encontrando los mismos problemas mencionados anteriormente, pero onError no me dio nada. El async solo estaba esperando y nunca prosiguió. Y luego, si carga en caliente, obtiene ERROR_ALREADY_REQUESTING_PERMISSIONS, porque todavía está esperando la entrada para esa solicitud de permiso.
Apuntando a IOS11, en Android funcionó todo bien. Ahora también lo hace en IOS.

Tengo el mismo problema con Flutter Web en un dispositivo IOS.
la aplicación no solicita ningún diálogo de permiso en IOS, pero funciona en dispositivos Windows y Android

¿Fue útil esta página
0 / 5 - 0 calificaciones