Skip to content

Most visited

Recently visited

navigation

Permisos y datos de usuario

Los permisos protegen la información confidencial de un dispositivo y solo deben usarse cuando sea necesario acceder a información para el funcionamiento de tu app.

En este documento se proporciona un panorama detallado del funcionamiento de los permisos en Android para que puedas tomar decisiones más adecuadas y fundamentadas respecto de los permisos que solicites. La información de este documento no es específica para un caso de uso y en él se evitan discusiones complejas de bajo nivel sobre el código subyacente.

Para hallar recomendaciones específicas sobre cómo administrar permisos, consulta Prácticas recomendadas para permisos de apps. Si deseas acceder a prácticas recomendadas para el uso de identificadores únicos en Android, consulta Prácticas recomendadas para identificadores únicos. Para obtener información detallada sobre cómo trabajar con permisos en tu código, consulta Cómo trabajar con permisos del sistema.

Introducción

Todas las aplicaciones de Android deben tener un archivo de manifiesto que presente información básica sobre la app al sistema Android. El sistema Android también exige que las apps soliciten permiso para acceder a información confidencial de dispositivos o usuarios, y esas solicitudes deben documentarse por anticipado en el manifiesto de tu app. A su vez, acceder a información confidencial puede afectar el comportamiento del usuario, por lo cual es importante que se asegures de solicitar permisos únicamente cuando la información sea necesaria para el funcionamiento de tu app.

Grupos de permisos

Los permisos en Android se organizan en permission groups que ordenan y agrupan permisos relacionados con las capacidades o funciones de un dispositivo. En este sistema, las solicitudes de permisos se controlan a nivel grupal y un grupo de permisos individual corresponde a varias declaraciones de permisos en el manifiesto de la app; por ejemplo, el grupo SMS incluye las declaraciones READ_SMS y RECEIVE_SMS.

Esta disposición es más sencilla e informativa para los usuarios; una vez que la app obtiene permiso para acceder al grupo, puede usar llamadas a API en ese grupo, y a los usuarios que tengan la actualización automática habilitada no se les solicitarán permisos adicionales porque ya habrán permitido el acceso al grupo. Agrupar permisos de esta manera permite al usuario tomar decisiones más significativas y fundamentadas sin verse abrumado por solicitudes de permisos complejas y técnicas.

Esto también significa que cuando solicites acceso a una llamada de API específica o consultes a un proveedor de contenido detrás de un permiso, el usuario recibirá una solicitud de permiso para el grupo completo y no para la llamada de API específica. Por ejemplo, si solicitas el permiso WRITE_CALL_LOG, se solicitará al usuario que otorgue acceso al grupo PHONE (en el nivel de API 23 y superior), que está compuesto por los permisos READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL, USE_SIP y PROCESS_OUTGOING_CALLS, y todos sus métodos asociados.

Una consecuencia de agrupar permisos es que una sola llamada de API en tu app puede tener un efecto multiplicador en términos de la cantidad de permisos solicitados por la app.

  1. Llamada de API. →
  2. Se activa una solicitud de acceso a un grupo de permisos específico. →
  3. Las solicitudes exitosas otorgan acceso a todos los permisos del grupo (si la actualización automática está habilitada). →
  4. Cada permiso otorga acceso a todas las API de ese permiso.

A modo de ejemplo, supongamos que tu aplicación usa uno o más métodos TelephonyManager; por ejemplo:

TelephonyManager.getDeviceId()
TelephonyManager.getSubscriberId()
TelephonyManager.getSimSerialNumber()
TelephonyManager.getLine1Number()
TelephonyManager.getVoiceMailNumber()

Para usar estos métodos, se debe declarar el permiso READ_PHONE_STATE en el manifiesto de la app, y se mostrará al usuario el grupo de permisos asociado, PHONE. Esto es importante porque significa que se solicitará al usuario permiso para el grupo en cuestión, y para los permisos y la llamadas de API asociados, no para la llamada de API específica que solicitas.

Si deseas acceder a una correspondencia completa entre permisos y sus grupos de permisos asociados, consulta la documentación específica para la versión que se indica a continuación:

Solicitudes de permisos y descargas de apps

Estoy usando el permiso READ_PHONE_STATE de Android para pausar mi reproductor multimedia cuando se realice una llamada y reanudar la reproducción cuando esta termine. El permiso parece amedrentar a muchos...1

Las investigaciones muestran que entre apps idénticas (p. ej., en funcionalidad y reconocimiento de marca), solicitar menos permisos genera más descargas. Existen fuentes públicas que asignan calificaciones a apps en función del uso de sus permisos, y permiten a los usuarios comparar apps relacionadas por puntaje. Dichas calificaciones existen para muchas de las apps de Android actuales y los usuarios pueden prestar atención a los rankings relacionados.

Un estudio2en el cual se expuso a los usuarios a dos apps sin marca con calificaciones similares que compartían parte de la funcionalidad, pero tenían diferentes conjuntos de solicitudes de permisos, demostró que los usuarios, en promedio, eran 3 veces más propensos a instalar la app con menos solicitudes de permisos. Un estudio similar 3 mostró que los usuarios son 1,7 veces más propensos, en promedio, a seleccionar la aplicación con menos solicitudes de permisos.

Por último, el uso de permisos no se distribuye de manera uniforme entre apps de una categoría similar de apps de Google Play. Por ejemplo, el 39,9% de las apps de juegos arcade de Play Store no solicitan permisos que se muestren directamente al usuario, mientras el 1,5% de los juegos arcade solicitan el grupo de permisos Phone (ver Figura 1).

Figura 1: Distribución del uso de grupos de permisos en la categoría de juegos Arcade.

Los usuarios que comparan tu app con otras apps similares pueden determinar que esta realiza solicitudes de permisos inusuales para esa categoría; en este caso, las apps de juegos Arcade que acceden al grupo de permisos Phone. En consecuencia, podrían instalar en esa categoría una app similar que evite esas solicitudes.4

Disminución de la tendencia de solicitud de permisos

Un análisis reciente de las apps de Play Store en el tiempo indicó que muchos desarrolladores recortan los permisos después de publicar sus apps por primera vez. Esto sugiere que podrían estar siendo más precavidos respecto de los grupos de permisos que declaran.

Figura 2: El uso de permisos populares por parte de los desarrolladores ha disminuido con el paso del tiempo.

En el gráfico de la Figura 2 se muestra esta tendencia. Se ha producido una disminución continua en el porcentaje promedio de apps de desarrolladores que solicitan al menos uno de los tres permisos más populares de Play Store (READ_PHONE_STATE, ACCESS_FINE_LOCATION y ACCESS_COARSE_LOCATION). Estos resultados indican que los desarrolladores están reduciendo la cantidad de permisos que solicitan sus apps en respuesta al comportamiento de los usuarios.

Lo más importante es que ofrecer la misma funcionalidad al usuario con mínimo acceso a información confidencial genera más descargas para tu app. Para acceder a recomendaciones específicas sobre cómo lograr esto, consulta Prácticas recomendadas para permisos de aplicaciones.

Referencias

[1] Cita de un desarrollador en StackOverflow. (fuente)

[2] Using Personal Examples to Improve Risk Communication for Security and Privacy Decisions, por M. Harbach, M. Hettig, S. Weber y M. Smith. En actas de ACM CHI 2014.

[3] Modeling Users’ Mobile App Privacy Preferences: Restoring Usability in a Sea of Permission Settings, por J. Lin B. Liu, N. Sadeh y J. Hong. En actas de SOUPS 2014.

[4] Teens and Mobile Apps Privacy. (fuente)

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)