API Permissions para a Web

Se você já usou a API Geolocation antes, é provável que você queira verificar se tinha permissão para usar geolocalização sem gerar uma solicitação. Isso simplesmente não era possível. Era necessário solicitar a posição atual, e isso indicaria o estado da permissão ou mostraria uma solicitação ao usuário.

Nem todas as APIs funcionam dessa maneira. A API Notifications tem uma maneira própria de permitir verificar o estado atual da permissão por meio de Notification.permission.

À medida que a plataforma da Web cresce em APIs, é necessário que haja uma forma única e padrão de os desenvolvedores verifiquem o status de uma permissão em vez de terem que se lembrar como cada API funciona. A API Permission, disponível no Chrome versão 43, está foi criado como uma maneira única e padrão de verificar o status de permissão de uma API.

permissions.query()

Verifique o status de uma permissão usando o método permissions.query(). Isso vai retornar um status de concedido (você tem permissão), negado (você está bloqueado para acessar a API) ou comando (necessidades do usuário que será solicitado). Exemplo:

// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'})
    .then(function(permissionStatus) {
    console.log('geolocation permission state is ', permissionStatus.state);

    permissionStatus.onchange = function() {
        console.log('geolocation permission state has changed to ', this.state);
    };
    });

O método de consulta recebe uma PermissionDescriptor em que você define o nome da permissão. A resposta é uma promessa resolver em um PermissionStatus objeto. A partir desse objeto, é possível conferir o estado com permissionStatus.state para "concedido", "negado" ou "prompt". Você também pode implementar um evento gerenciador de permissionStatus.onchange e processar mudanças na permissão estado.

PermissionDescriptors com suporte

No exemplo acima, destacamos como consultar o estado de permissão para geolocalização com o seguinte descritor de permissão: {name:'geolocation'}.

O descritor de permissão de notificação é semelhante, porque exige apenas uma atributo de nome: {name:'notifications'}.

Push e midi têm um valor adicional específico dessa API.

Para a permissão push, é possível fornecer um parâmetro userVisibleOnly. Isso indica se você quer exibir uma notificação para cada mensagem push ou enviar notificações push silenciosas. No momento, somente o Chrome oferece suporte a mensagens push com notificações). Você o usaria da seguinte forma:

navigator.permissions.query({name:'push', userVisibleOnly:true})

A Midi permite um parâmetro sysex. Isso indica se você precisa e/ou receber mensagens exclusivas do sistema. Para midi, seria:

navigator.permissions.query({name:'midi', sysex:true})

Como solicitar permissões

A solicitação de permissão do usuário depende da API específica. Por exemplo: geolocalização mostra uma solicitação de permissão quando você chama getCurrentPosition().

navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

Já as notificações solicitariam ao usuário quando você chama requestPermission().

Notification.requestPermission(function(result) {
    if (result === 'denied') {
    console.log('Permission wasn\'t granted. Allow a retry.');
    return;
    } else if (result === 'default') {
    console.log('The permission request was dismissed.');
    return;
    }
    console.log('Permission was granted for notifications');
});

A questão aqui é que a API Permission permite uma maneira consistente de monitorar status das permissões, ao mesmo tempo em que é possível dar suporte às APIs atualmente ativas na Web.

A grande vantagem disso é que você pode criar experiências melhores para aos usuários e só fazer uma solicitação quando for óbvio para eles por que você precisa e aproveitar ao máximo essas APIs quando souber que está que você recebeu.

Você encontra um conjunto completo de exemplos aqui.

Compatibilidade com navegadores

O Chrome é o primeiro navegador a implementar esse recurso. A Mozilla planeja lançar e a Microsoft mostrou interesse na API.

Problemas conhecidos

  • A geolocalização não mostrará novamente uma solicitação se o usuário dispensar a permissão. solicitação. No entanto, o status de permissão continua sendo "prompt". [bugs.chromium.org]