Genehmigungs-API für das Web

Matt Gaunt

Wenn Sie schon einmal mit der Geolocation API gearbeitet haben, haben Sie wahrscheinlich schon einmal prüfen wollen, ob Sie die Standortbestimmung verwenden dürfen, ohne dass eine Aufforderung angezeigt wird. Das war einfach nicht möglich. Sie mussten den aktuellen Standort anfordern, um den Berechtigungsstatus zu ermitteln oder dem Nutzer eine Aufforderung zu zeigen.

Das ist nicht bei allen APIs der Fall. Mit der Notifications API können Sie den aktuellen Berechtigungsstatus über Notification.permission prüfen.

Da die Webplattform immer mehr APIs umfasst, muss es eine einzige standardmäßige Möglichkeit für Entwickler geben, den Status einer Berechtigung zu prüfen, anstatt sich merken zu müssen, wie jede einzelne API funktioniert. Die Permission API, die in Chrome Version 43 verfügbar ist, soll die einzige standardmäßige Möglichkeit sein, den Berechtigungsstatus einer API zu prüfen.

permissions.query()

Verwenden Sie die Methode permissions.query(), um den Status einer Berechtigung zu prüfen. Dadurch wird der Status „granted“ (gewährt) zurückgegeben, wenn Sie die Berechtigung haben, „denied“ (abgelehnt), wenn der Zugriff auf die API blockiert ist, oder „prompt“ (Aufforderung), wenn der Nutzer aufgefordert werden muss. Beispiel:

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

Die Abfragemethode nimmt ein PermissionDescriptor-Objekt an, in dem Sie den Namen der Berechtigung definieren. Die Antwort ist ein Versprechen, das in ein PermissionStatus-Objekt aufgelöst wird. Über dieses Objekt kannst du den Status mit permissionStatus.state auf „granted“ (gewährt), „denied“ (abgelehnt) oder „prompt“ (auffordern) prüfen. Sie können auch einen Ereignishandler für permissionStatus.onchange implementieren und Änderungen am Berechtigungsstatus verarbeiten.

Unterstützte PermissionDescriptors

Im obigen Beispiel wird gezeigt, wie Sie den Berechtigungsstatus für die Standortermittlung mit dem folgenden Berechtigungsbeschreiber abfragen: {name:'geolocation'}.

Der Berechtigungs-Descriptor für Benachrichtigungen ist ähnlich, da er nur ein Name-Attribut erfordert: {name:'notifications'}.

Push und midi haben jeweils einen zusätzlichen Parameter, der für die jeweilige API spezifisch ist.

Für die Push-Berechtigung können Sie einen userVisibleOnly-Parameter angeben. Hier können Sie festlegen, ob Sie für jede Push-Nachricht eine Benachrichtigung erhalten möchten oder ob stumme Push-Benachrichtigungen gesendet werden sollen. Derzeit unterstützt Chrome nur Push-Nachrichten mit Benachrichtigungen. So verwenden Sie sie:

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

Midi erlaubt einen sysex-Parameter. Hier wird angegeben, ob Sie systemspezifische Nachrichten senden und/oder empfangen müssen. Für MIDI wäre das:

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

Berechtigungen anfordern

Ob Sie die Berechtigung vom Nutzer anfordern müssen, hängt von der jeweiligen API ab. Bei der Standortbestimmung wird beispielsweise eine Berechtigungsanfrage angezeigt, wenn Sie getCurrentPosition() aufrufen.

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

Bei Benachrichtigungen wird der Nutzer aufgefordert, wenn Sie requestPermission() anrufen.

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

Der Vorteil besteht darin, dass die Permission API eine einheitliche Möglichkeit bietet, den Status von Berechtigungen zu überwachen und gleichzeitig die Bandbreite der derzeit im Web verfügbaren APIs zu unterstützen.

Der große Vorteil besteht darin, dass Sie die Nutzerfreundlichkeit verbessern können, da nur dann eine Aufforderung angezeigt wird, wenn für den Nutzer klar ist, warum Sie zusätzliche Berechtigungen benötigen. Außerdem können Sie diese APIs vollumfänglich nutzen, wenn Sie wissen, dass Ihnen die Berechtigung erteilt wurde.

Hier finden Sie eine vollständige Liste der Beispiele.

Unterstützte Browser

Chrome ist der erste Browser, in dem diese Funktion implementiert ist. Mozilla plant, sie einzuführen, und Microsoft hat Interesse an der API gezeigt.

Bekannte Probleme

  • Wenn der Nutzer die Berechtigungsanfrage ablehnt, wird die Aufforderung zur Standortermittlung nicht noch einmal angezeigt. Der Berechtigungsstatus bleibt jedoch „Sofort“. [bugs.chromium.org]