Genehmigungs-API für das Web

Matt Gaunt

Wenn Sie die Geolocation API schon einmal verwendet haben, möchten Sie wahrscheinlich prüfen, ob Sie zur Verwendung der Standortbestimmung berechtigt waren, ohne dass eine Aufforderung erscheint. Das war einfach nicht möglich. Sie mussten die aktuelle Position anfordern. Dies würde den Berechtigungsstatus anzeigen oder dazu führen, dass dem Nutzer eine Aufforderung angezeigt wurde.

Nicht alle APIs funktionieren auf diese Weise. Die Notifications API bietet eine eigene Möglichkeit, den aktuellen Berechtigungsstatus über Notification.permission zu prüfen.

Da Webplattformen immer größer werden, benötigen Entwickler eine einzige Standardmethode, um den Status einer Berechtigung zu prüfen, anstatt sich merken zu müssen, wie jede einzelne API funktioniert. Die in Chrome Version 43 verfügbare Permission API ist eine einzelne Standardmethode zum Prüfen des Berechtigungsstatus einer API.

permissions.query()

Prüfen Sie den Status einer Berechtigung mit der Methode permissions.query(). Dadurch wird der Status „Gewährt“ (Sie haben eine Berechtigung), „Abgelehnt“ (Sie dürfen nicht auf die API zugreifen) oder „Eingabeaufforderung“ (Nutzer muss dazu aufgefordert werden) zurückgegeben werden. 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 verwendet ein PermissionDescriptor-Objekt, in dem Sie den Namen der Berechtigung definieren. Die Antwort ist ein Promise-Objekt, das auf ein PermissionStatus-Objekt aufgelöst wird. In diesem Objekt können Sie den Status mit permissionStatus.state auf „gewährt“, „abgelehnt“ oder „prompt“ prüfen. Sie können auch einen Event-Handler für permissionStatus.onchange implementieren und Änderungen am Berechtigungsstatus verarbeiten.

Unterstützte PermissionDescriptors

Im Beispiel oben wird hervorgehoben, wie der Berechtigungsstatus für die Standortbestimmung mit dem folgenden Berechtigungsdeskriptor abgefragt wird: {name:'geolocation'}.

Der Deskriptor der Benachrichtigungsberechtigung ähnelt insofern, als dass er nur ein Namensattribut erfordert: {name:'notifications'}.

Push und midi haben jeweils einen zusätzlichen Parameter speziell für diese API.

Für die Push-Berechtigung können Sie den Parameter userVisibleOnly angeben. Damit wird angegeben, ob Sie für jede Push-Nachricht eine Benachrichtigung anzeigen oder lautlose Push-Benachrichtigungen senden können (derzeit unterstützt Chrome nur Push-Nachrichten mit Benachrichtigungen). Dann würden Sie es so verwenden:

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

Midi lässt einen sysex-Parameter zu. Dies gibt an, ob Sie exklusive Systemnachrichten benötigen und/oder empfangen müssen. Für Midi wäre das:

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

Berechtigungen anfordern

Ob der Nutzer eine Berechtigung anfordert, hängt von der jeweiligen API ab. Durch die Standortbestimmung wird beispielsweise eine Berechtigungsaufforderung 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);
});

Benachrichtigungen dagegen würden den Nutzer auffordern, wenn du requestPermission() aufrufst.

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 Punkt hierbei ist, dass die Permission API eine einheitliche Methode zur Überwachung des Berechtigungsstatus ermöglicht und gleichzeitig die Reihe der derzeit im Web verfügbaren APIs unterstützt.

Der große Vorteil besteht darin, dass Sie damit eine bessere Nutzererfahrung bieten können, da Sie nur dann gefragt werden, wenn für den Nutzer klar ist, warum Sie zusätzliche Berechtigungen benötigen, und dass Sie diese APIs optimal nutzen können, wenn Sie sicher sind, dass Ihnen die Berechtigung erteilt wurde.

Vollständige Beispiele finden Sie hier.

Unterstützte Browser

Chrome ist der erste Browser, in dem diese Funktion implementiert wird, Mozilla plant eine Auslieferung und Microsoft hat bereits Interesse an der API gezeigt.

Bekannte Probleme

  • Wenn der Nutzer die Berechtigungsanfrage ablehnt, wird durch die Standortbestimmung keine Aufforderung mehr angezeigt. Der Berechtigungsstatus bleibt jedoch „Prompt“. [bugs.chromium.org]