Diego Laballós

Desarrollador de aplicaciones Android

Guía para utilizar los permisos en Android

Guía de permisos para Android

La mayoría de las aplicaciones móviles necesitan ciertos permisos para acceder a información del usuario. Esto pasa porque las aplicaciones móviles están diseñadas para, por defecto, acceder únicamente a su propia información, es decir, que si quieren a acceder a información que no han generado ellas mismas, necesitan antes pedir permiso al usuario.

Un ejemplo muy claro, es el acceso a la ubicación del usuario. Una aplicación no puede acceder a esa información sin antes solicitar permiso al usuario. Una vez el usuario haya consentido que dicha aplicación pueda ver la ubicación del dispositivo a través del GPS, entonces sí que podrá utilizar la información libremente.

Los permisos son algo básico que se introdujo desde los inicios de los sistemas operativos móviles. Permiten mantener la privacidad de cierta información del usuario, ya que los dispositivos móviles tienen multitud de datos privados. En este artículo vamos a ver cómo se estructuran y se utilizan los permisos de las aplicaciones en Android.

1. Declaración de permisos

El primer paso para saber qué permisos tenemos que utilizar es, obviamente, saber cuáles vamos a necesitar. Esto ya depende de cada aplicación.

Una aplicación por ejemplo de running, necesitará guardar las rutas que haya hecho el usuario. Para ello tendrá ir viendo la ubicación del usuario cuando indica que va a salir a correr. En este caso necesitaría el permiso para acceder a la ubicación del GPS, que en Android es ACCESS_FINE_LOCATION.

Otro ejemplo, podría ser una aplicación estilo karaoke que grabará lo que el usuario canta para después reproducirlo. En este caso necesitaría acceder al micrófono del dispositivo. En Android este permiso es RECORD_AUDIO.

Así que, una vez sabemos qué permisos vamos a necesitar, tenemos que indicárselo a nuestra aplicación definiéndolos en el archivo AndroidManifest.xml. Para ello utilizaremos la etiqueta , indicando en el atributo android:name, el nombre del permiso.

Esta declaración sería un ejemplo de una aplicación que utiliza el permiso para grabar audio.

Declaración de un permiso en android en el androidmanifest

Ya está, ya le hemos indicado a la aplicación que necesitamos ese permiso. Ahora el propio sistema Android cuando vea nuestra aplicación instalada, sabrá que necesitamos esos permisos para según qué funciones de nuestra app. El mismo sistema será el encargado de solicitar al usuario que nos permita el acceso a esas características. Ahora bien, según el permiso que estemos solicitando y la versión de Android en la que esté la aplicación instalada, el sistema le pedirá el permiso al usuario de una u otra manera. Para ver esto antes necesitamos ver cómo están estructurados los permisos en Android.

2. Tipos de permisos

Android tiene clasificados sus permisos en dos niveles. Vamos a ver estos dos niveles y la utilidad que tienen.

En primer lugar los permisos están agrupados en grupos. Por ejemplo, los permisos que tienen que ver con el acceso a los contactos del móvil, como por ejemplo ver los contactos o editarlos, se agrupan en un grupo llamado contactos.

Grupos y permisos a los cuales pertenecen
Fuente : Ribot

Esta es una tabla realizada por la web Ribot con los grupos y los permisos que contienen.

El hecho de que esté agrupados tiene básicamente un sentido. Cuando el usuario te concede un permiso, no te concede sólo el acceso a ese permiso concreto, te concede permiso para todo el grupo. De esta manera, por ejemplo, si tuvieras una aplicación que gestionara los contactos a modo de agenda, el usuario no tendría que concederte dos permisos, el de leer y el de escribir, sino que al concederte el primer permiso, el otro, al estar en el mismo grupo, quedaría automáticamente concedido.

En segundo lugar, Android también clasifica los permisos en función del nivel de privacidad que contengan. No es lo mismo que la aplicación tenga el permiso de poder acceder a internet, que hoy en día casi todas lo necesitan, que acceder a algo tan sensible como las fotos del móvil. De esta manera, android también clasifica todos los permisos en 2 grupos, permisos normales y permisos peligrosos.

Como hemos comentado, los permisos normales son permisos cuyo nivel de acceso no tiene mucho riesgo sobre la privacidad del usuario, en cambio, los permisos peligrosos, como su nombre ya lo indica, tienen un nivel de acceso a privacidad muy superior. La diferencia entre los permisos de un grupo y los del otro, es la manera en que el usuario los acepta. Esto nos lleva a ver el siguiente punto, aceptación de permisos por parte del usuario.

3. Aceptación de permisos

En primer lugar, la manera en que el usuario concede un permiso a una aplicación depende del grupo al cual ese permiso pertenece.

Los que pertenecen al grupo de permisos normales, son concedidos automáticamente por el sistema. El usuario no nos tendrá que dar explícitamente permiso para utilizar características como acceder a internet, colocar una alarma o acceder al bluetooth. Son permisos que no pueden poner en grave riesgo la privacidad del usuario. Si te interesa, puedes ver una lista completa de los permisos normales en Android.

La cosa cambia cuando se trata de los permisos que están dentro del grupo de peligrosos. Estos permisos, cómo hemos dicho antes, pueden poner en riesgo la privacidad del usuario. Acceder a los contactos del móvil, enviar SMS de forma automática o acceder al micro del dispositivo, son características, que para poder usarse, el usuario tiene que otorgar permiso explícitamente.

La forma en que el usuario concede un permiso peligroso a una aplicación, depende de la versión de Android en la cual esté. Al principio, cuando descargabas una aplicación de Google Play, antes de instalarla te aparecía un mensaje en el que te indicaba los permisos que necesitaba la aplicación. Si aceptabas descargar la aplicación, estabas otorgando directamente todos y cada uno de los permisos que se listaban. La única manera de no conceder un permiso era no descargar la aplicación.

Cuando instalabas una aplicación de Android, desde un inicio tenías que aceptar todos los permisos

Como se puede ver en estas capturas de pantalla, la instalación, por ejemplo de Facebook, requería desde un inicio aceptar todos los permisos que la aplicación iba a necesitar.

Esto se ha mejorado a partir de la versión Android 6.0. Ahora los permisos no se conceden antes de descargar la aplicación, sino que se piden y conceden en tiempo real. El usuario puede conceder o rechazar un permiso cuando la aplicación lo solicita. Además, podrá revocar un permiso siempre que quiera desde el menú de configuración del propio sistema.

Ahora los permisos en las aplicaciones móviles se conceden a medida que la aplicación los necesita

Estas capturas pertenecen a un dispositivo con una versión de Android 6.0. Como se puede apreciar, ahora cuando instalamos la aplicación no nos pide la aceptación de permisos. Simplemente nos aparece un mensaje avisándonos que vamos a tener que conceder lo permisos dentro de la propia app. En este caso, una vez estamos dentro de la aplicación de Facebook y esta necesita un permiso, nos invita a que se lo concedamos.

Imagina una aplicación que necesita acceso a la cámara. Si el dispositivo tiene una versión menor que Android 6.0, aceptará o rechazará el permiso antes de descargar la aplicación. En el caso de que lo rechace, no podrá descargar la aplicación. En cambio, la misma aplicación con un dispositivo con Android 6.0 o superior, no necesitará conceder ese permiso al descargar la aplicación. El usuario podrá instalar y usar la aplicación con total normalidad y sin haber concedido el permiso a la cámara. Ahora bien, en el momento que la aplicación necesite ese acceso, le pedirá al usuario que le otorgue acceso a la cámara. Si el usuario se lo concede, la aplicación funcionará como está previsto. Si se rechaza ese permiso, la aplicación simplemente no podrá acceder a la cámara.

De esta manera, los permisos en los dispositivos en Android son un poco más complejos, dando más libertad a los usuarios para elegir. Un usuario puede conceder permiso a la cámara pero en cambio rechazar el acceso a la localización a la misma aplicación. Esto es algo a lo que los usuarios de iOS ya llevaban mucho más tiempo acostumbrados.

4. Consultar y pedir el permiso

Teniendo en cuenta lo explicado en el punto anterior, como programadores, tenemos dos situaciones para pedir los permisos.

La primera es para los dispositivos que tengan una versión menor a Android 6.0. Para estos no nos tenemos que preocupar. Los permisos se nos concederán automáticamente así que podemos utilizar las características del dispositivo con total libertad.

La segunda situación se dará en los dispositivos que tengan Android 6.0 o superior. Aquí sí que tendremos que asegurarnos que tenemos el permiso previamente, cosa que nos obligará el propio IDE de desarrollo, y después actuar en consecuencia.

Para utilizar un permiso a partir de Android 6.0 tenemos que asegurarnos antes de que tenemos el acceso

Este ejemplo de código es una muestra de los pasos que se tienen que seguir. En este caso se trata de una aplicación que utiliza la posición GPS del usuario y antes comprueba que tiene el permiso para ello. Los puntos interesantes aquí son:

  1. Comprobamos si tenemos o no el permiso
  2. En caso de tenerlo, procedemos a utilizar la característica
  3. En caso de no tenerlo, actuamos en consecuencia

En este caso, cuando no se tiene el permiso simplemente no se lleva a cabo la acción. Este snippet de código está ubicado en un servicio que corre en segundo plano y por lo tanto no se le pide al usuario el permiso. En caso de hacerse dentro de una Activity por ejemplo, tendríamos que intentar conseguir ese permiso.

Conclusión

Sin duda, para los usuarios de Android, es un sistema mucho más potente y seguro. Por eso ahora tendremos que ganarnos la confianza del usuario para cada permiso que le solicitemos.

El cambio en el sistema de permisos supone ahora un trabajo extra a la hora de pensar y desarrollar una aplicación. Debemos tener en cuenta que los usuarios podrán concedernos o negarnos permisos con mucha facilidad y necesitaremos pensar bien cuándo y cómo pedir esos permisos. Si no pensamos una buena manera de convencer al usuario de que necesitamos una característica en concreto, podemos hacer que la experiencia de usuario no sea la deseada.

Imagina una aplicación que necesita, sí o sí, el acceso al GPS para funcionar. Al abrir la aplicación por primera vez, sin dar información acerca de para qué se va a utilizar, se pide el permiso al usuario. Hay bastantes posibilidades que el usuario diga : ¿para qué necesita esto el acceso a mi ubicación? No se lo voy a conceder. Lo que pasará, es que cuando entre dentro de la aplicación sin dicho permiso, la mayoría de cosas no funcionarán porque no se podrá acceder a la ubicación. En según que casos, el usuario necesitará volver a concedernos ese permiso desde el menú de configuración del sistema y no dentro de la propia aplicación. Eso supondrá una barrera de entrada bastante grande y puede resultar en que la aplicación tenga muchas papeletas para ser desinstalada porque no funciona como el usuario esperaba.

Así pues, tendremos que pensar y aplicar una serie de buenas prácticas para pedir los permisos. Como siempre, ya sabes que si tienes alguna duda/sugerencia me puede encontrar en mi formulario de contacto y estaré encantado de atenderte.

Compartir