Las solicitudes de permisos son el principal mecanismo de la Web para proteger a los usuarios de funciones potentes que podrían ser peligrosas para su privacidad y seguridad. Los navegadores tienen como objetivo confirmar que un usuario desea permitir una capacidad en un sitio web específico. Puedes implementar permisos para varias APIs, incluidas las de captura de medios (cámara y micrófono), geolocalización, acceso al almacenamiento, MIDI y notificaciones.
Sigue estas prácticas cuando muestres mensajes de permisos a los usuarios, según las estadísticas de uso y la investigación de usuarios de Chrome. Si las sigues, tus usuarios deberían ver menos mensajes innecesarios, lo que generará menos decisiones de bloqueo.
Este documento finaliza con algunos patrones de código para las APIs protegidas por permisos y cómo ayudar a los usuarios a recuperarse de un estado bloqueado.
Prácticas recomendadas para escribir instrucciones
Solicita permiso después de una interacción del usuario, cuando este tenga el contexto para comprender por qué lo solicitas y qué beneficio obtendrá si permite el acceso.
Cuando sea posible, proporciona medios alternativos para realizar la misma tarea. Si eliges cuidadosamente el momento adecuado para hacer la pregunta, reduces las probabilidades de que tus usuarios queden en un estado bloqueado del que sea difícil recuperarse.
Nunca se pregunta al cargar la página ni sin interacción del usuario.
Solicitar permiso cuando se carga la página equivale a pedirle información sensible a un cliente cuando entra a una tienda física. Ver un mensaje de permiso, posiblemente entre varios otros mensajes para registrarse en el boletín informativo y dar el consentimiento para el uso de cookies, es una experiencia desagradable. Los usuarios no entenderán por qué se les pide permiso ni cómo se beneficiarán.
Incluso si tu aplicación web no puede funcionar sin acceso a una determinada capacidad, dales a los usuarios la oportunidad de comprender por qué es necesaria. Por ejemplo, explica por qué se necesita el mensaje de permiso y brinda a los usuarios una opción (por ejemplo, proporciona medios alternativos para lograr la misma funcionalidad). Si no se te ocurre un mejor momento para solicitar permiso que cuando se carga la página, puedes consultar algunos ejemplos más adelante en esta guía.
Solicitar permiso sin interacción previa del usuario tampoco es eficaz. Esto se conoce como activación transitoria del usuario. La telemetría de Chrome muestra que el 77% de los mensajes de permiso en computadoras de escritorio se muestran sin un indicador de intención del usuario y, en consecuencia, solo se permiten el 12% de esos mensajes. Después de una interacción del usuario, las tasas de permisos aumentan al 30%.
Solo solicita permiso después de que el usuario haya interactuado con la página.
Solo pregunta cuando los usuarios puedan entender el motivo
Las decisiones sobre permisos suelen ser decisiones sobre la privacidad. Según el marco de integridad contextual, sabemos que las decisiones sobre la privacidad son muy contextuales. Es fundamental comprender por qué es necesario el acceso. Solo debes solicitar las capacidades que necesitas para proporcionar valor, en las que es probable que los usuarios acepten que encontrarán valor. Además, solicita permiso cuando sea evidente para el usuario por qué la capacidad es útil. Facilita a los usuarios la comprensión del contexto de uso.
Nuestra investigación sobre usuarios muestra que es mucho más probable que los usuarios permitan el acceso cuando comprenden por qué un sitio lo solicita y también perciben un beneficio. También descubrimos que los usuarios esperan explorar primero los sitios desconocidos para comprender mejor el valor que pueden obtener a cambio de permitir el acceso. Mientras tanto, a menudo rechazarán o ignorarán las solicitudes de permiso. Con los permisos únicos, es posible que primero permitan una sola visita. Admite estos comportamientos en tu aplicación.
Brinda alternativas
Es posible que el resultado de algunas funciones no sea útil para los usuarios. Por ejemplo, la geolocalización de un dispositivo de escritorio sin sensor de GPS podría devolver la ubicación incorrecta porque la persona está conectada a una VPN. Es posible que otros usuarios no quieran proporcionar acceso al portapapeles porque prefieren mantener el control y activar estos eventos con combinaciones de teclas de forma manual. En estas situaciones, proporciona una forma alternativa de lograr los mismos resultados.
Por ejemplo, si solicitas permiso de ubicación geográfica, ofrece un campo de texto en el que los usuarios puedan ingresar un código postal o una dirección. Permite seleccionar elementos y copiarlos en el portapapeles con una combinación de teclas o el menú contextual. Para las notificaciones, ofrece correos electrónicos en lugar de notificaciones push.
Un patrón útil es usar la IU alternativa también como explicación de por qué el acceso podría ser beneficioso. Los usuarios que ven una opción para ingresar una ubicación junto a un botón que activa la API de geolocalización sienten que tienen el control, ya que comprenden que pueden escribir su dirección. Del mismo modo, si hay una opción entre recibir notificaciones push o por correo electrónico, o unirse a una reunión sin permitir el acceso a la cámara y el micrófono, los usuarios comprenden las ventajas y desventajas.
Evita los estados bloqueados
Una vez que un usuario rechaza de forma permanente el acceso a una función protegida por permisos, los navegadores respetan esa decisión. Si fuera posible seguir solicitando acceso, los sitios maliciosos bombardearían a los usuarios con solicitudes. Recuperarse del estado bloqueado de una capacidad requiere un esfuerzo intencional. Evita solicitar permiso en situaciones en las que es poco probable que los usuarios permitan el acceso.
Una forma común de hacerlo es usar un llamado predeterminado, en el que les expliques a los usuarios lo que está a punto de suceder y por qué tu aplicación necesita la capacidad que vas a solicitar. Solo debes activar la solicitud de permiso del navegador cuando los usuarios reaccionen de forma afirmativa a esa instrucción previa. Hay situaciones en las que los usuarios pueden necesitar legítimamente recuperarse de ese estado. Consulta la sección Ayuda a los usuarios a recuperarse de un estado de bloqueo para obtener más información.
Presta atención al contenido de terceros
Ten en cuenta las fuentes inesperadas de mensajes de solicitud de permisos. Es posible que las secuencias de comandos de terceros en tu sitio activen mensajes de permisos no deseados. Esto puede afectar la experiencia del usuario, en especial si las instrucciones no siguen las prácticas recomendadas. Para mantener el control de la experiencia del usuario, lee la documentación de todas las bibliotecas y secuencias de comandos de terceros que agregues a tu código.
Cuándo solicitar permiso
Estos son algunos ejemplos de momentos en los que es adecuado solicitar permiso, según las prácticas recomendadas:
- Después de que un usuario hace clic en Usar mi ubicación junto a un campo de formulario, cuando ingresa una dirección de forma manual
- Después de que un usuario se suscribe a un canal de video o a publicaciones, y hace clic en un botón de confirmación en un diálogo que describe que las actualizaciones se pueden enviar como correos electrónicos o notificaciones
- Después de que un usuario llega a una página que lo prepara para unirse a una videollamada y responde de forma afirmativa en una instrucción previa que quiere que lo vean y lo escuchen. Obtén más información en el caso de éxito de Google Meet.
Patrones de código
El permiso para usar una API se otorga de diferentes maneras, según la API. Algunas APIs más antiguas usan un modelo en el que el navegador solicita permiso automáticamente la primera vez que intentas usar la API. Un ejemplo es la API de Geolocation cuando se llama a navigator.geolocation.getCurrentPosition().
try {
navigator.geolocation.getCurrentPosition((pos) => console.log(pos));
} catch (error) {
console.error(error);
}
Otras APIs usan un modelo en el que primero solicitas permiso de forma explícita con un método estático. Un buen ejemplo es Notification.requestPermission() para permitir notificaciones o el menos común DeviceOrientationEvent.requestPermission(), que forma parte de la API de Device Orientation Events.
Algunos navegadores otorgan automáticamente permiso a ciertas APIs. Por ejemplo, Chrome siempre permite el acceso a la orientación del dispositivo, mientras que Safari muestra un mensaje.
const result = await DeviceOrientationEvent.requestPermission();
console.log(`The user's decision when prompted to use the Device Orientation
Events API was: ${result}.`);
if (result === 'granted') {
/* Use the API. */
}
Verifica el estado de los permisos
Para verificar si puedes usar una API determinada, usa el método navigator.permissions.query() de la API de Permissions.
const result = await navigator.permissions.query({ name: 'geolocation' });
console.log(`The result of querying for the Geolocation API is:
${result.state}.`);
if (result.state === 'granted') {
// Use the API.
}
Ayuda a los usuarios a recuperarse de un estado de bloqueo
Para ayudar a los usuarios a solucionar problemas de acceso, detecta que bloquearon el acceso con la API de Permissions y ofrece una guía para cambiar la configuración. Cuando los usuarios interactúen con elementos de la IU asociados a una capacidad protegida por permisos, usa el estado de verificación de permisos y abre un diálogo de solución de problemas.
Los pasos exactos para cambiar el estado del permiso varían según el navegador, por lo que se ofrecen descripciones coincidentes basadas en el string del usuario-agente para los navegadores de uso frecuente.
En Chrome, los usuarios pueden cambiar los permisos desde Ver la información del sitio > Configuración del sitio, que se encuentra en la barra de direcciones. En algunos casos, es posible que deban volver a cargar la página antes de usar una función. En ese caso, aparecerá una barra de mensajes en la parte superior de la ventana que ofrecerá volver a cargar el sitio.


En otros navegadores, como Firefox, existen IU similares para controlar los permisos.