API Permissions pour le Web

Si vous avez déjà travaillé avec l'API Geolocation, vous avez probablement voulu vérifier si vous aviez l'autorisation d'utiliser la géolocalisation sans afficher de requête. Cela n'était tout simplement pas possible. Vous deviez demander la position actuelle, ce qui indiquait l'état de l'autorisation ou provoquait l'affichage d'une invite à l'utilisateur.

Ce n'est pas le cas de toutes les API. L'API Notifications vous permet de vérifier l'état actuel de l'autorisation via Notification.permission.

À mesure que la plate-forme Web s'enrichit d'API, les développeurs doivent disposer d'une méthode unique et standard pour vérifier l'état d'une autorisation au lieu de devoir se souvenir du fonctionnement de chaque API. L'API Permission, disponible dans la version 43 de Chrome, est conçue pour être le seul moyen standard de vérifier l'état des autorisations d'une API.

permissions.query()

Vérifiez l'état d'une autorisation à l'aide de la méthode permissions.query(). Vous obtiendrez alors un état d'accord (vous disposez de l'autorisation), de refus (vous êtes bloqué pour accéder à l'API) ou d'invite (l'utilisateur doit être invité). Exemple :

// 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);
    };
    });

La méthode de requête utilise un objet PermissionDescriptor, dans lequel vous définissez le nom de l'autorisation. La réponse est une promesse qui se résout en un objet PermissionStatus. À partir de cet objet, vous pouvez vérifier l'état avec permissionStatus.state pour "granted", "denied" ou "prompt". Vous pouvez également implémenter un gestionnaire d'événements pour permissionStatus.onchange et gérer les modifications de l'état de l'autorisation.

PermissionDescriptors compatibles

Dans l'exemple ci-dessus, nous expliquons comment interroger l'état de l'autorisation pour la géolocalisation avec le descripteur d'autorisation suivant: {name:'geolocation'}.

Le descripteur d'autorisation de notification est similaire en ce sens qu'il ne nécessite qu'un attribut de nom: {name:'notifications'}.

Push et midi disposent chacun d'un paramètre supplémentaire spécifique à cette API.

Pour l'autorisation de transfert, vous pouvez fournir un paramètre userVisibleOnly. Indique si vous souhaitez afficher une notification pour chaque message push ou si vous pouvez envoyer des notifications push silencieuses (pour le moment, Chrome n'est compatible qu'avec les messages push avec notifications). Vous l'utiliserez comme suit:

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

Midi autorise un paramètre sysex. Indique si vous devez et/ou recevez des messages exclusifs au système. Pour le MIDI, procédez comme suit:

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

Demander des autorisations

La demande d'autorisation à l'utilisateur dépend de l'API spécifique. Par exemple, la géolocalisation affiche une invite d'autorisation lorsque vous appelez getCurrentPosition().

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

Les notifications invitent l'utilisateur lorsque vous appelez 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');
});

L'idée est que l'API Permission permet de surveiller de manière cohérente l'état des autorisations tout en étant compatible avec la gamme d'API actuellement sur le Web.

L'avantage principal est qu'il vous permet de créer de meilleures expériences pour vos utilisateurs, en n'affichant une invite que lorsque l'utilisateur comprend pourquoi vous avez besoin d'autorisations supplémentaires et en tirant pleinement parti de ces API lorsque vous savez que vous avez reçu l'autorisation.

Vous trouverez ici un ensemble complet d'exemples.

Navigateurs pris en charge

Chrome est le premier navigateur à l'implémenter, Mozilla prévoit de le faire, et Microsoft s'est montré intéressé par l'API.

Problèmes connus

  • La géolocalisation ne réaffichera pas d'invite si l'utilisateur ignore la demande d'autorisation. Toutefois, l'état de l'autorisation reste "invite". [bugs.chromium.org]