Diego Laballós

Desarrollador de aplicaciones Android

Mejores prácticas para los permisos en Android

En este artículo verás una serie de buenas prácticas para los permisos en Android

Con la llegada de Android 6.0, los permisos en Android han cambiado. Mientras que antes los usuarios tenían que aceptar todos los permisos que iba a utilizar una aplicación al descargarla, ahora ya no es así. Las aplicaciones pedirán los permisos al usuario en tiempo real cuando estén utilizando la aplicación.

Esta nueva estructura de permisos en Android se parece mucho a la que iOS ya tiene desde hace tiempo. Las aplicaciones solicitan, en el momento que lo necesitan, el acceso a cierta característica. El usuario será el encargado de conceder o rechazar cada uno de los permisos.

Si quieres saber más sobre este nuevo modelo de permisos, puedes consultar un artículo que tengo dedicado íntegramente a ello donde hice una guía de permisos para Android.

Todo ello hace que ahora se tenga que tener más cuidado a la hora de pedir los permisos. Un usuario puede rechazar cualquier permiso que le solicitemos y aún así, podrá seguir utilizando la aplicación. Es por esto que debemos seguir una serie de buenas practicas a la hora de pedir los permisos en Android.

¿Por qué seguir unas buenas prácticas para pedir los permisos?

En el caso de no conseguir el acceso al permiso que necesitamos para nuestra aplicación, puede resultar en una mala experiencia de usuario. Esto puede conllevar que al usuario no le guste nuestra aplicación y por lo tanto deje de utilizarla e incluso desinstalarla.

Imagina una aplicación para pedir taxis. Su funcionalidad base sería que el usuario pueda pedir un taxi para la ubicación en la que está actualmente. Para poder implementar todo el sistema, necesitaría el permiso para acceder a la ubicación del usuario. En el caso de que este permiso se solicite de una manera inapropiada o no se explique correctamente para qué se necesita, el usuario podría rechazar el permiso.

Si esto sucede, quiere decir que cada vez que el usuario quiera pedir un taxi, tendrá que introducir la dirección manualmente en vez de que la app obtenga la posición automáticamente a través del GPS del dispositivo. El resultado es una experiencia del usuario bastante mala.

Malas reacciones de los usuarios a una mala experiencia de aplicación
Fuente: SimiliarWeb

En este estudio acerca de la reacción de los usuarios ante una mala experiencia de usuario, se puede ver la importancia que tiene. Por ejemplo, un 48% de los usuarios dijeron que seguramente no volverían a utilizar esa app y un 34% decidieron cambiar hacia la app de la competencia.

Así que para evitar esta posible mala experiencia, vamos a ver 5 puntos a tener en cuenta para el uso de permisos en Android.

1. ¿Realmente es necesario el permiso?

Ahora que el usuario nos tiene que conceder acceso individualmente para cada permiso que solicitemos, puede llegar a ser un poco frustrante para él estar aceptando permisos. Es más, cada vez que le preguntemos por el acceso a una nueva característica puede sentirse invadido o preocupado por lo que la aplicación vaya a hacer con esos datos. Es por eso que la primera mejor práctica es saber si realmente el permiso es necesario.

Que necesitemos acceder a una característica del móvil, muchas veces, no quiere decir que nuestra aplicación necesite manejarla directamente.

En Android para realizar una tarea, generalmente tenemos dos opciones, una es pedir el permiso necesario y encargarnos de realizarla, y la otra es pedir a otra aplicación que lo haga por nosotros y nos devuelva el resultado de la tarea. Esta última se consigue a través de los llamados intents.

Para verlo de una manera más sencilla veamos un ejemplo práctico. Vamos a suponer que estamos creando una aplicación de entretenimiento donde el usuario puede tomar una foto y colocarle objetos divertidos para hacerla graciosa.

La primera posibilidad sería pedir permiso para acceder a la cámara. De este manera, nuestra aplicación utilizaría la cámara directamente en nuestra interfaz de usuario. Tendríamos un control total sobre la foto y podríamos personalizar los botones para tomar la foto.

La otra posibilidad sería delegar esta tarea. Utilizaríamos un intent para que el usuario tomara una foto con otra aplicación. Para ello, el sistema abriría la aplicación por defecto para tomar fotos, que típicamente sería la aplicación nativa del sistema, y el usuario sacaría la foto. Al terminar, volvería a nuestra aplicación y tendríamos disponible la foto que haya sacado. La gran ventaja aquí es que nos hemos ahorrado un permiso además de mucho código extra a escribir por nuestra parte.

La app meetup utiliza un intent para tomar un foto en vez de usar el permiso de la cámara

Estas capturas de pantalla demuestran el uso de un intent. En este caso, la app Meetup utiliza un intent para cambiar nuestra foto de perfil. Cuando seleccionamos la opción de tomar una foto, automáticamente la tarea se delega en la aplicación de la cámara del móvil. Si no tenemos una aplicación por defecto para hacer fotos y tenemos varias que pueden hacerlo, como en esta ocasión, nos dejará elegir con qué aplicación tomarla.

Una vez hayamos sacado la foto, volveremos otra vez a la aplicación con nuestra imagen ya capturada.

Siempre que sea posible, es mejor delegar la tarea que pedir un permiso para hacerla nosotros mismos. Obviamente, no todas las tareas son delegables y hay permisos que nuestra aplicación necesitará utilizar sí o sí.

2. Pedir el permiso en el momento adecuado

Piensa por un momento en una aplicación, que por distintos motivos, necesita acceder a los permisos de la cámara, acceder al GPS, leer los contactos y ver las fotos del usuario. Imagina que acabas de descargar esta app. La abres por primera vez y de repente te aparecen 4 pop-ups distintos solicitándote acceso a todos estos permisos. ¿No parece muy buena idea no?

Tenemos que procurar no agobiar al usuario con la concesión de permisos. Hay que tener en cuenta que cada vez que le preguntemos por un permiso, se le presentará un pop-up con esa solicitud y tendrá que aceptarlo. Si de repente ve que se le presentan 4 solicitudes de permiso sin previo aviso y todas juntas, lo más probable es que acabe rechazando alguna.

Una de las peores ideas es solicitar varios permisos a la vez. Buscar el momento adecuado para solicitar cada permiso, es la mejor manera de evitar que sean rechazados.

Típicamente un buen momento para pedir el permiso es ese instante en que el usuario lo necesita.

  • ¿Quieres ir a correr y guardar tu ruta? Concédeme permiso al GPS.
  • ¿Quieres grabar una nota de voz? Concédeme permiso al micrófono.

De esta manera, el usuario comprenderá que para realizar esa característica concreta, necesita antes conceder ciertos permisos.

Si tu aplicación tiene un tutorial inicial, donde explicas como funcionan las diferentes características, es un buen momento también para preguntar por algún permiso.

Twitter pide el permiso de ubicación en un momento adecuado

Otro ejemplo real, en este caso Twitter. Cuando nos registramos y aún no estamos siguiendo a nadie, nos aconseja buscar nuevas personas para seguirlas. A continuación, nos recomienda que le compartamos la ubicación para poder ver recomendaciones locales que pueden ser de nuestro interés y si estamos interesados nos pide el permiso.

En vez de pedirnos el permiso al empezar la aplicación directamente sin ninguna razón, nos lo sugiere ahora que no tenemos ninguna persona a la que seguir. Un buen momento, ya que a cambio de concederle la ubicación podremos ver información relevante.

3. Explicar para qué se utilizará el permiso

En cualquier situación, la mejor forma de que alguien te preste algo, es explicar para qué o por qué te lo tiene que prestar. Con los permisos en los dispositivos móviles sucede lo mismo. Le estamos pidiendo al usuario que nos deje acceder a cierta información que le pertenece. Así que una buena manera de convencerle es explicarle para qué lo necesitas.

Cuando pedimos al usuario que nos conceda un permiso, por defecto, el sistema muestra un pop-up que indica el nombre del permiso al cual se quiere acceder. Este diálogo no informa al usuario del uso que se va a hacer de esa característica. Deberemos ser nosotros quien le explique al usuario para qué necesitamos este permiso.

En ocasiones el propio contexto de la solicitud ya servirá como explicación. Imagina una aplicación de running. La primera vez que el usuario sale a correr utilizando la app, le solicita acceso al GPS. En este caso, el usuario entenderá que si quiere guardar su ruta tiene que habilitar el acceso al GPS. Podríamos entonces prescindir de la explicación ya que es bastante obvia.

Sin embargo, hay otros casos donde este contexto no es tan claro. Piensa ahora en una aplicación de fotografía que, entre otras funcionalidades, geolocaliza las fotos para que después el usuario pueda ver en un mapa dónde se han sacado. Aquí puede ser fácil de comprender el permiso de acceso a la cámara sin explicación previa, al fin y al cabo es una aplicación de fotografía. En cambio, el permiso de acceso al GPS, puede resultar extraño en un principio. Sobretodo si el usuario no sabe que una de las funciones es esa localización de fotos en un mapa. Por lo tanto, sería una buena idea antes de solicitar dicho permiso, explicar esa funcionalidad y qué permisos necesita para habilitarla. A continuación, podríamos pedirle el acceso al GPS.

En las capturas de pantalla anteriores de Twitter ya has podido ver cómo explican claramente para qué necesitan el permiso. De todas maneras, vamos a ver otro ejemplo de la misma aplicación.

La app de Twitter explica perfectamente para qué necesita acceso al permiso de ver los contactos del móvil

Ahora se trata del permiso de acceder a los contactos del móvil. Estas pantallas se nos muestran cuando queremos importar nuevos contactos a Twitter. Como se puede ver, nos explica detalladamente que se sincronizarán nuestros contactos del móvil para saber si están en Twitter. Además, nos aclara que podremos en un futuro cancelar esta sincronización.

4. Asegúrate tener el permiso antes de realizar la acción

El hecho de que el usuario te haya concedido un permiso, no quiere decir que lo vayas a tener siempre. Con el nuevo modelo de permisos en Android, el usuario puede revocar un permiso a una aplicación en cualquier momento.

Esto quiere decir que cada vez que utilices una característica que requiera un permiso, necesitarás comprobar que lo tienes. No sólo eso, tendrás que tener una estrategia preparada para recuperar ese permiso en el caso de que lo pierdas. En el caso que veas que ya no tienes el permiso, tendrás que intentar recuperarlo con otra explicación.

Si un usuario te ha concedido un permiso inicialmente, pero luego te lo ha eliminado, algo ha pasado. Puede ser que no haya acabado de entender para qué se necesita o tiene dudas del uso que se está haciendo. Eso quiere decir que no tiene sentido volver a mostrar el mismo mensaje que le mostraste. Quizás el usuario necesite una explicación más detallada para que te ganes su confianza otra vez.

En resumen, tendrías que tener dos tipos de explicaciones preparadas. Por un lado, una explicación breve del permiso para la primera vez. Por otro, una explicación más detallada de su uso para recuperar el permiso que inicialmente tenías. Quizás, en esta segunda explicación, también podrías exponer los puntos en contra de no tener ese permiso habilitado.

5. Comprueba los permisos individualmente y no en grupo

Como ya debes saber, los permisos están unificados en grupos.

Grupos y permisos a los cuales pertenecen
Fuente : Ribot

Aquí puedes ver una tabla donde se detallan los grupos de permisos.

Pues bien, cuando un usuario te concede un permiso, automáticamente se concede para todos los permisos dentro del mismo grupo.

La mejor manera de ver esto es un ejemplo. Imaginemos que tu aplicación gestiona los contactos del móvil. Necesitará por lo menos dos permisos, leer los contactos y editar contactos. Estos dos pertenecen al grupo de permisos llamado contactos. Esto quiere decir, que en el momento que el usuario te conceda el permiso para leer los contactos, automáticamente tu aplicación tendrá acceso a editar contactos. Lo mismo sucede a la inversa si se solicita antes el permiso para editar los contactos.

Bien, pues no debes confiar en esta característica. Debes comprobar y solicitar cada permiso individualmente sin dar por hecho que tendrás permiso en el grupo. El mismo Google nos avisa de ello diciéndonos que no nos puede garantizar que los grupos mantenga la misma estructura en futuras versiones de Android.

Conclusión

Conseguir que un usuario nos conceda un permiso necesario para nuestra aplicación no es complicado. Simplemente tenemos que explicar y encontrar el momento adecuado para pedírselo.

Tan solo dedicando un pequeño rato inicialmente a pensar como convencerlo, puede ahorrarnos muchos problemas. Perder un permiso es perder funcionalidades, es recortar la experiencia de usuario. Si esta experiencia no es buena, nuestra aplicación no lucirá todo lo que habíamos pensado. Al final, un pequeño detalle, como es al concesión de un permiso, pueda acabar con nuestra aplicación desinstalada.

Si tienes alguna duda o pregunta, puedes contactar conmigo en este formulario y estaré encantado de ayudarte.

Compartir