As solicitações de permissão são o principal mecanismo da Web para proteger os usuários de recursos avançados que podem ser perigosos para a privacidade e segurança deles. Os navegadores têm como objetivo confirmar se um usuário pretende permitir um recurso em um site específico. É possível implementar permissões para várias APIs, incluindo captura de mídia (câmera e microfone), geolocalização, acesso ao armazenamento, MIDI e notificações.
Siga estas práticas ao mostrar solicitações de permissão aos usuários, com base nas estatísticas de uso do Chrome e na pesquisa de usuários. Quando seguidas, os usuários vão encontrar menos solicitações desnecessárias, o que leva a menos decisões de bloqueio.
Este documento termina com alguns padrões de código para APIs com permissão e como ajudar os usuários ase recuperar de um estado bloqueado.
Práticas recomendadas para comandos
Peça permissão após uma interação do usuário, quando eles tiverem o contexto para entender por que você está pedindo e qual benefício eles recebem ao permitir o acesso.
Quando possível, ofereça meios alternativos para realizar a mesma tarefa. Ao escolher cuidadosamente o momento certo para pedir, você reduz as chances de os usuários ficarem em um estado bloqueado do qual é difícil se recuperar.
Nunca peça no carregamento de página ou sem interação do usuário
Pedir permissão no carregamento da página é equivalente a pedir informações confidenciais a um cliente ao entrar em uma loja física. Ver uma solicitação de permissão, possivelmente entre várias outras solicitações de inscrição em newsletters e consentimento de cookies, é uma experiência desagradável. Os usuários não vão entender por que estão sendo solicitados e como eles se beneficiarão.
Mesmo que seu aplicativo da Web não funcione sem acesso a um determinado recurso, ofereça aos usuários a chance de entender por que ele é necessário. Por exemplo, prefira a solicitação de permissão com o motivo pelo qual ela é necessária e ofereça aos usuários uma opção (por exemplo, ao fornecer meios alternativos para realizar a mesma funcionalidade). Se você não conseguir pensar em um momento melhor para pedir permissão do que no carregamento de página, confira alguns exemplos mais adiante neste guia.
Pedir permissão sem interação prévia do usuário também é ineficaz. Isso é conhecido como ativação transitória do usuário. A telemetria do Chrome mostra que 77% das solicitações de permissão no computador são mostradas sem um sinal de intenção do usuário e, consequentemente, apenas 12% dessas solicitações são permitidas. Após uma interação do usuário, as taxas de permissão aumentam para 30%.
Peça permissão somente depois que o usuário interagir com a página.
Peça apenas quando os usuários puderem entender o motivo
As decisões de permissão geralmente são decisões de privacidade. Com base na estrutura de integridade contextual, sabemos que as decisões de privacidade são altamente contextuais. É fundamental entender por que o acesso é necessário. Você só deve solicitar os recursos necessários para oferecer valor, em que os usuários provavelmente concordarão que encontrarão valor. Além disso, peça permissão quando for evidente para o usuário por que o recurso é útil. Facilite a compreensão do contexto de uso para os usuários.
Nossa pesquisa de usuários mostra que eles têm muito mais probabilidade de permitir o acesso quando entendem por que um site está pedindo acesso e também percebem um benefício. Também descobrimos que os usuários esperam explorar sites desconhecidos primeiro para entender melhor o valor que podem receber em troca de permitir o acesso. Eles geralmente dispensam ou ignoram as solicitações de permissão enquanto isso. Com permissões únicas, eles podem permitir uma única visita primeiro. Ofereça suporte a esses comportamentos no seu aplicativo.
Fornecer alternativas
O resultado de alguns recursos pode não ser útil para os usuários. Por exemplo, a geolocalização de um dispositivo de computador sem um sensor de GPS pode retornar o local errado porque essa pessoa está conectada a uma VPN. Outros usuários podem não querer fornecer acesso à área de transferência porque preferem manter o controle e acionar esses eventos com combinações de teclas manualmente. Nessas situações, ofereça uma maneira alternativa de alcançar os mesmos resultados.
Por exemplo, ao solicitar permissão de geolocalização, ofereça um campo de texto em que os usuários possam inserir um CEP ou endereço. Permita que os elementos sejam selecionados e copiados para a área de transferência com um atalho de teclado ou o menu de contexto. Para notificações, ofereça e-mail em vez de notificações push.
Um padrão útil é usar a interface alternativa também como a explicação de por que o acesso pode ser benéfico. Os usuários que veem uma opção para inserir um local ao lado de um botão que aciona a API Geolocation se sentem no controle, porque entendem que podem digitar o endereço. Da mesma forma, se houver uma opção entre receber notificações por push ou e-mail ou participar de uma reunião sem permitir o acesso à câmera e ao microfone, os usuários entenderão as compensações.
Evitar estados bloqueados
Depois que um usuário nega permanentemente o acesso a um recurso com permissão, os navegadores honram essa decisão. Se fosse possível continuar pedindo acesso, sites maliciosos bombardeariam os usuários com solicitações. A recuperação do estado bloqueado de um recurso exige esforço. Evite pedir permissão em situações em que os usuários provavelmente não permitirão o acesso.
Uma maneira comum de fazer isso é usar uma chamada prévia, em que você explica aos usuários o que está prestes a acontecer e por que seu aplicativo precisa do recurso que você vai solicitar. Somente quando os usuários reagirem afirmativamente a essa chamada prévia, você deverá acionar a solicitação de permissão do navegador. Há situações em que os usuários podem precisar se recuperar desse estado. Consulte a seção Ajudar os usuários a se recuperar de um estado bloqueado para saber mais sobre isso.
Preste atenção ao conteúdo de terceiros
Esteja ciente de fontes inesperadas de solicitações de permissão. Scripts de terceiros no seu site podem acionar solicitações de permissão não intencionais. Isso pode afetar a experiência do usuário, especialmente se as solicitações não seguirem as práticas recomendadas. Para manter o controle da experiência do usuário, leia a documentação de todas as bibliotecas e scripts de terceiros que você adicionar ao seu código.
Quando pedir permissão
Confira alguns exemplos de momentos que funcionam bem para pedir permissão, seguindo as práticas recomendadas:
- Depois que um usuário clica em Usar minha localização ao lado de um campo de formulário, ao inserir um endereço manualmente.
- Depois que um usuário se inscreve em um canal de vídeo ou postagens e clica em um botão afirmativo em uma caixa de diálogo que descreve que as atualizações podem ser entregues como e-mails ou notificações.
- Depois que um usuário chega a uma página que o prepara para participar de uma videochamada e responde afirmativamente em uma chamada prévia que quer ser visto e ouvido. Leia mais no estudo de caso do Google Meet.
Padrões do código
A permissão para usar uma API é concedida por meios diferentes, dependendo da API. Algumas APIs mais antigas usam um modelo em que o navegador pede permissão automaticamente na primeira vez que você tenta usar a API. Um exemplo é a
API Geolocation ao chamar
navigator.geolocation.getCurrentPosition().
try {
navigator.geolocation.getCurrentPosition((pos) => console.log(pos));
} catch (error) {
console.error(error);
}
Outras APIs usam um modelo em que você pede permissão explicitamente primeiro com um método estático. Um bom exemplo é
Notification.requestPermission()
para permitir notificações ou o
DeviceOrientationEvent.requestPermission()menos comum,
que faz parte da API Device Orientation Events.
Alguns navegadores concedem permissão automaticamente a determinadas APIs. Por exemplo, o Chrome sempre permite o acesso a uma orientação do dispositivo, enquanto o Safari mostra uma solicitação.
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. */
}
Verificar o estado das permissões
Para verificar se você pode usar uma determinada API, use o
navigator.permissions.query()
método da API 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.
}
Ajudar os usuários a se recuperar de um estado bloqueado
Para ajudar os usuários a resolver problemas de acesso, detecte que eles bloquearam o acesso usando a API Permissions e ofereça um guia sobre como mudar as configurações. Quando os usuários interagem com elementos da interface associados a um recurso com permissão, use o estado de permissão de verificação e abra uma caixa de diálogo de solução de problemas.
As etapas exatas para mudar o estado de permissão variam de acordo com o navegador. Portanto, ofereça descrições correspondentes com base na string do user agent para os navegadores usados com frequência.
No Chrome, os usuários podem mudar as permissões em Ver informações do site > Configurações do site, encontradas na barra de endereço. Em alguns casos, eles podem precisar recarregar a página antes de usar um recurso. Nesse caso, uma barra de mensagens aparece na parte de cima da janela que oferece a opção de recarregar o site.


Interfaces semelhantes para controlar permissões existem em outros navegadores, como em Firefox.