Cómo minimizar las solicitudes de permiso

Como parte de la mejora de la calidad de las apps y la protección de la privacidad del usuario, te recomendamos reducir el uso de permisos en tus apps. Esto ayuda a los usuarios a descubrir y usar apps de alta calidad que proporcionan un entorno de seguridad y protección para el usuario.

La solicitud de permisos de usuarios interrumpe el flujo de usuarios, y los usuarios pueden denegar tu solicitud. Además, cada vez que declares un permiso nuevo, deberás revisar cómo tu app solicita y comparte los datos de los usuarios. Algunos permisos sensibles y APIs requieren que proporciones en la app una divulgación sobre el acceso, la recopilación y el uso de los datos, así como con quién se comparten.

Existen varias formas alternativas de minimizar el uso de permisos:

  • Declara permisos que proporcionen información de ubicación aproximada, en lugar de información de ubicación precisa, si la app solo necesita la ubicación aproximada.
  • Llama a las APIs que permiten que tu app realice la funcionalidad deseada sin declarar permisos.
  • Invoca intents o controladores de eventos específicos para llevar a cabo la funcionalidad, en lugar de declarar permisos.
  • El sistema proporciona contratos integrados para diferentes operaciones con archivos y también admite contratos personalizados.

Si debes declarar un permiso, siempre respeta la decisión del usuario y proporciona una forma de degradar elegantemente la experiencia de tu app.

En esta página, se describen varios casos de uso que tu app puede entregar sin declarar la necesidad de permisos.

Cómo mostrar lugares cercanos

Es posible que tu app necesite conocer la ubicación aproximada del usuario. Esto es útil para mostrar información de reconocimiento de la ubicación, como restaurantes cercanos.

Algunos casos de uso solo requieren una estimación aproximada de la ubicación de un dispositivo. En esas situaciones, realiza una de las siguientes acciones, según la frecuencia con la que tu app necesite información de reconocimiento de la ubicación:

  • Si la app necesita la ubicación con más frecuencia, declara el permiso ACCESS_COARSE_LOCATION. El permiso proporciona una estimación de la ubicación del dispositivo a partir de servicios de ubicación, como se describe en la documentación sobre la exactitud de la ubicación aproximada.
  • Si tu app necesita la ubicación con menos frecuencia o solo una vez, pídele al usuario que ingrese una dirección o un código postal.

Otros casos de uso requieren una estimación más precisa de la ubicación de un dispositivo. Solo en esos casos es correcto declarar el permiso ACCESS_FINE_LOCATION.

Cómo crear archivos y acceder a ellos

Android te permite crear archivos y acceder a ellos sin tener que declarar ningún permiso relacionado con el almacenamiento ni los sensores.

Cómo abrir archivos multimedia

Tu app puede permitirles a los usuarios elegir entre sus fotos y videos, como archivos adjuntos de mensajes o fotos de perfil.

Para admitir esta función, usa el selector de fotos. El selector de fotos no requiere ningún permiso de tiempo de ejecución. Cuando un usuario interactúa con el selector de fotos para elegir fotos o videos con el objetivo de compartirlos con tu app, el sistema otorga acceso de lectura temporal al URI asociado con los archivos multimedia seleccionados.

Si tu app necesita acceder a archivos multimedia sin usar el selector de fotos, no necesitas declarar ningún permiso de almacenamiento:

Cómo abrir documentos

Tu app puede mostrar documentos que el usuario crea, ya sea en tu app o en otra. Un ejemplo común son los archivos de texto.

En ese caso, declara READ_EXTERNAL_STORAGE solo para brindar compatibilidad con dispositivos más antiguos. Establece la android:maxSdkVersion en 28.

Según la app que haya creado el documento, realiza una de las siguientes acciones:

Cómo tomar fotos

Es posible que los usuarios tomen fotos en tu app con la app de cámara del sistema preinstalada.

En este caso, no declares el permiso CAMERA. En su lugar, invoca la acción de intent ACTION_IMAGE_CAPTURE.

Cómo grabar un video

Es posible que los usuarios graben videos en tu app con la app de cámara del sistema preinstalada.

En este caso, no declares el permiso CAMERA. En su lugar, invoca la acción de intent ACTION_VIDEO_CAPTURE.

Cómo identificar el dispositivo que ejecuta una instancia de tu app

Es posible que una instancia específica de tu app necesite saber en qué dispositivo se está ejecutando. Esto es útil para las apps que tienen preferencias o mensajes específicos para cada tipo de dispositivo, como listas de reproducción diferentes para dispositivos de TV y dispositivos wearables.

En este caso, no accedas directamente al IMEI del dispositivo. De hecho, a partir de Android 10, no puedes hacerlo. Como alternativa, realiza una de las siguientes acciones:

  • Obtén un identificador de dispositivo único para la instancia de tu app mediante la biblioteca de Instance ID.
  • Crea tu propio identificador específico para el almacenamiento de la app. Usa funciones básicas del sistema, como randomUUID().

Cómo vincular un dispositivo mediante Bluetooth

Es posible que tu app ofrezca una experiencia mejorada mediante la transferencia de datos a otro dispositivo a través de Bluetooth.

Para admitir esta función, no declares los permisos ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION ni BLUETOOTH_ADMIN. En su lugar, usa la vinculación de dispositivos complementarios.

Cómo ingresar automáticamente un número de tarjeta de pago

Los Servicios de Google Play ofrecen una biblioteca que te permite ingresar automáticamente un número de tarjeta de pago. En lugar de declarar el permiso CAMERA, puedes usar la biblioteca de reconocimiento de tarjetas de crédito y débito.

Cómo administrar llamadas telefónicas y mensajes de texto

Los Servicios de Google Play y Android ofrecen bibliotecas que te permiten administrar llamadas telefónicas y mensajes de texto sin necesidad de declarar ningún permiso relacionado con llamadas telefónicas ni mensajes SMS.

Cómo ingresar automáticamente una contraseña de un solo uso

Para optimizar un flujo de trabajo de autenticación de dos factores, es posible que tu app ingrese automáticamente una contraseña de un solo uso que se envía al dispositivo de un usuario para verificar su identidad.

Para admitir esta funcionalidad en dispositivos con los Servicios de Google Play, no declares el permiso READ_SMS. En su lugar, usa la API de SMS Retriever.

En otros dispositivos, si tu app se orienta a Android 8.0 (nivel de API 26) o versiones posteriores, genera un token específico para ella mediante createAppSpecificSmsToken(). Pasa ese token a otra app o servicio que pueda enviar un mensaje SMS de verificación.

Cómo ingresar automáticamente el número de teléfono del usuario

Para proporcionar ventas o asistencia más eficaces, tu app puede permitir que el usuario ingrese automáticamente el número de teléfono de su dispositivo.

Para admitir esta funcionalidad en dispositivos con los Servicios de Google Play, no declares el permiso READ_PHONE_STATE. En su lugar, usa la biblioteca de Phone NumberHint.

Cómo filtrar llamadas telefónicas

A fin de reducir las interrupciones innecesarias para el usuario, tu app puede filtrar llamadas telefónicas de spam.

Para admitir esta función, no declares el permiso READ_PHONE_STATE. En su lugar, usa la API de CallScreeningService.

Cómo realizar llamadas telefónicas

Tu app puede ofrecer la capacidad de realizar una llamada telefónica si presionas la información de un contacto.

Para admitir esta funcionalidad, usa la acción de intent ACTION_DIAL en lugar de la acción ACTION_CALL. ACTION_CALL requiere el permiso en el momento de la instalación CALL_PHONE, que evita que los dispositivos que no pueden realizar llamadas, como algunas tablets, instalen tu aplicación.

Cómo detener contenido multimedia cuando se interrumpe la app

Si el usuario recibe una llamada telefónica o si suena una alarma configurada por él, tu app deberá pausar la reproducción multimedia hasta que recupere el foco de audio.

Para admitir esta función, no declares el permiso READ_PHONE_STATE. En su lugar, implementa el controlador de eventos onAudioFocusChange(), que se ejecuta automáticamente cuando el sistema cambia el foco de audio. Descubre cómo implementar el foco de audio.

Cómo escanear códigos de barras

Android admite la API de Google Code Scanner, que cuenta con la tecnología de los Servicios de Google Play, lo que te permite decodificar códigos de barras sin declarar ningún permiso de la cámara. Esta API ayuda a preservar la privacidad del usuario y reduce las probabilidades de que necesites crear una IU personalizada para tu caso de uso de escaneo de códigos de barras.

La API escanea el código de barras y solo muestra los resultados del escaneo a tu app. Las imágenes se procesan en el dispositivo y Google no almacena datos ni resultados del escaneo.

Si tu app necesita admitir casos de uso complejos o formatos de códigos de barras, o si requiere una IU personalizada, usa la API de escaneo de códigos de barras de ML Kit.

Cómo restablecer permisos sin usar

Android proporciona varias formas de restablecer los permisos de tiempo de ejecución sin usar a su estado predeterminado y denegado, como las siguientes:

Lee la guía de diseño.

Cómo solicitar permisos de tiempo de ejecución

Una vez que hayas evaluado que tu app debe declarar y solicitar permisos de tiempo de ejecución, sigue un flujo de trabajo específico para hacerlo.

Lee la guía de diseño.

Cómo explicar por qué tu app necesita permisos

Cuando se usa requestPermissions(), se muestra un diálogo en el que se indican los permisos que la app quiere usar, pero no se explica el motivo, lo que podría resultar desconcertante para el usuario.

Para obtener más detalles y recomendaciones sobre cómo y cuándo mostrar este diálogo, consulta la guía de diseño.

Cómo controlar las denegaciones de permisos

Tu app debe ayudar a los usuarios a comprender las implicaciones de denegar un permiso antes y después de que decidan hacerlo.

Lee la guía de diseño.