Prácticas recomendadas de permisos de la app

Las solicitudes de permisos protegen la información sensible de un dispositivo y solo deben usarse cuando el acceso a la información es necesario para el funcionamiento de tu app. En este documento, se proporcionan sugerencias para lograr la misma (o mejor) funcionalidad sin requerir acceso a esa información. No es un análisis exhaustivo de cómo funcionan los permisos en el sistema operativo Android.

Para obtener un panorama general sobre los permisos de Android, consulta la Descripción general de permisos. Para descubrir cómo trabajar con permisos en tu código, consulta Cómo solicitar permisos de la app.

Permisos en Android 6.0 y versiones posteriores

En Android 6.0 (nivel de API 23) y versiones posteriores, las apps pueden solicitarle permisos al usuario en el tiempo de ejecución, en lugar de antes de la instalación. Esto permite que las apps soliciten permisos cuando se necesitan los servicios o los datos protegidos por estos. Si bien esto no cambia (necesariamente) el comportamiento general de las apps, introduce algunas modificaciones relevantes en la manera en que se manejan los datos sensibles del usuario:

Mayor contexto de la situación

En el contexto de tu app, se solicita permiso a los usuarios durante el tiempo de ejecución para acceder a las funcionalidades que abarcan esos grupos de permisos. Los usuarios son más sensibles al contexto en el que se solicita el permiso y, si lo que solicitas no coincide con el propósito de tu app, es incluso más importante proporcionarles una explicación detallada del motivo por el cual necesitas el permiso. Siempre que sea posible, debes brindar una explicación de la solicitud, tanto cuando la realizas como en un diálogo de seguimiento (si el usuario la rechaza).

Para aumentar la probabilidad de que se acepte una solicitud de permiso, solo solicítala cuando se requiera una función específica. Por ejemplo, solicita acceso al micrófono solo cuando un usuario haga clic en el botón del micrófono. Es más probable que los usuarios otorguen un permiso de una función que quieran usar.

Mayor flexibilidad en el otorgamiento de permisos

Los usuarios pueden denegar el acceso a permisos individuales cuando se soliciten y en la configuración, pero quizá se sorprendan cuando la funcionalidad se vea afectada como consecuencia de esto. Te recomendamos controlar la cantidad de usuarios que deniegan permisos (p. ej., con Google Analytics), de manera que puedas refactorizar tu app para evitar depender de ese permiso o proporcionar una mejor explicación del motivo por el cual lo necesitas para que tu app funcione correctamente. También debes asegurarte de que esta maneje excepciones cuando los usuarios rechacen solicitudes de permisos o los desactiven en la configuración.

Mayor carga de transacciones

Se solicita a los usuarios que otorguen acceso a grupos de permisos de manera individual y no en conjunto. Esto hace que minimizar la cantidad de permisos que solicitas sea sumamente importante. Aumenta la carga de otorgamiento de permisos para el usuario y, por lo tanto, la probabilidad de que se deniegue al menos una de las solicitudes.

Permisos que requieren convertirse en un controlador predeterminado

Algunas apps dependen del acceso a la información sensible del usuario que se relaciona con sus registros de llamadas y mensajes SMS. Si quieres solicitar los permisos específicos para registros de llamadas y mensajes SMS, y publicar tu app en Play Store, debes solicitar al usuario que configure tu app como controlador predeterminado para una función principal del sistema antes de solicitar estos permisos de tiempo de ejecución.

Para obtener más información sobre los controladores predeterminados, así como orientación sobre cómo mostrar una solicitud de estos a los usuarios, consulta la guía sobre permisos que se usan solo en controladores predeterminados.

Conoce las bibliotecas con las que trabajas

En ocasiones, las bibliotecas que usas en tu app requieren permisos. Por ejemplo, las bibliotecas de anuncios y estadísticas pueden requerir acceso al grupo de permisos LOCATION para implementar la funcionalidad requerida. Sin embargo, desde la perspectiva del usuario, la solicitud de permiso proviene de tu app, y no de la biblioteca.

Así como los usuarios seleccionan apps que usan menos permisos para la misma funcionalidad, los desarrolladores deben revisar sus bibliotecas y seleccionar SDK de terceros que no soliciten permisos innecesarios. Por ejemplo, si usas una biblioteca que proporciona la funcionalidad de ubicación, asegúrate de no solicitar el permiso FINE_LOCATION, a menos que estés usando la funcionalidad de orientación basada en la ubicación.

Limita el acceso en segundo plano a la ubicación

Cuando se ejecuta tu app en segundo plano, el acceso a la ubicación debe ser fundamental para la funcionalidad principal de la app y mostrar un beneficio claro a los usuarios.

Prueba ambos modelos de permisos

En Android 6.0 (nivel de API 23) y versiones posteriores, los usuarios otorgan y revocan permisos de la app en el tiempo de ejecución, en lugar de hacerlo cuando la instalan. Como resultado, tendrás que probar tu app en una variedad más amplia de condiciones. Antes de Android 6.0, podías suponer razonablemente que, si tu app estaba ejecutándose, significaba que tenía todos los permisos declarados en su manifiesto. Ahora, el usuario puede activar o desactivar los permisos de cualquier app, independientemente del nivel de API. Debes realizar pruebas para asegurarte de que tu app funciona, de manera correcta, en varias situaciones de permisos.

Las siguientes sugerencias te ayudarán a encontrar los problemas de código relacionados con los permisos en los dispositivos que ejecutan el nivel de API 23 o superior:

  • Identifica los permisos actuales de tu app y las rutas de acceso de códigos relacionadas.
  • Prueba los flujos del usuario en los datos y servicios protegidos por permisos.
  • Prueba con varias combinaciones de permisos otorgados y rechazados. Por ejemplo, en el manifiesto de una app de cámara, podrían indicarse CAMERA, READ_CONTACTS, ACCESS_FINE_LOCATION. Debes probar la app con cada uno de esos permisos activados y desactivados, para asegurarte de que la app pueda controlar todas las configuraciones de permisos sin inconvenientes.
  • Usa la herramienta de adb para administrar los permisos desde la línea de comandos:
    • Enumera los permisos y estados por grupo:
      $ adb shell pm list permissions -d -g
    • Otorga o revoca uno o más permisos:
      $ adb shell pm [grant|revoke] <permission-name> ...
  • Analiza tu app en busca de servicios que usen permisos.

Recursos adicionales