Permissions API for the web

Jeśli korzystasz z interfejsu Geolocation API, prawdopodobnie chcesz sprawdzić, czy masz uprawnienia do korzystania z geolokalizacji bez wyświetlania prośby. To było po prostu niemożliwe. Musisz poprosić o aktualną pozycję, co wskazuje na stan uprawnień lub powoduje wyświetlenie użytkownikowi monitu.

Nie wszystkie interfejsy API działają w ten sposób. Interfejs Notifications API ma własny sposób na sprawdzenie bieżącego stanu uprawnień za pomocą Notification.permission.

Wraz z rozwojem platformy internetowej rośnie liczba interfejsów API, dlatego programiści muszą mieć jeden standardowy sposób sprawdzania stanu uprawnień zamiast zapamiętywać, jak działają poszczególne interfejsy API. Interfejs Permission API, dostępny w wersji Chrome 43, ma być tym jedynym standardowym sposobem sprawdzania stanu uprawnień interfejsu API.

permissions.query()

Sprawdź stan uprawnienia za pomocą metody permissions.query(). Zwracany stan to granted (przyznano uprawnienia), denied (zablokowano dostęp do interfejsu API) lub prompt (wyświetlono prompt). Na przykład:

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

Metoda zapytania przyjmuje obiekt PermissionDescriptor, w którym definiujesz nazwę uprawnienia. Odpowiedź to obietnica, która zwraca obiekt PermissionStatus. Z tego obiektu możesz sprawdzić stan za pomocą permissionStatus.state(„granted” [przyznany], „denied” [odrzucony] lub „prompt” [prompt]). Możesz też zaimplementować w tym celu permissionStatus.onchange i obsługiwać zmiany stanu uprawnień.

Obsługiwane obiekty PermissionDescriptor

W tym przykładzie pokazujemy, jak zapytać o stan uprawnień do geolokalizacji za pomocą tego deskryptora uprawnień: {name:'geolocation'}.

Opis uprawnień do wysyłania powiadomień jest podobny w tym sensie, że wymaga tylko atrybutu nazwa: {name:'notifications'}.

Pushmidi mają dodatkowy parametr, który jest specyficzny dla danego interfejsu API.

W przypadku uprawnień do push-u możesz podać parametr userVisibleOnly. Określa, czy chcesz wyświetlać powiadomienie przy każdym powiadomieniu push, czy też wysyłać powiadomienia push bez dźwięku (obecnie Chrome obsługuje tylko powiadomienia push z powiadomieniami). Użyjesz go w ten sposób:

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

Midi pozwala na parametr sysex. Określa, czy musisz wysyłać lub otrzymywać wiadomości, które są dostępne tylko w danym systemie. W przypadku pliku MIDI będzie to:

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

Wysyłanie prośby o uprawnienia

Prośba o przyznanie uprawnień zależy od konkretnego interfejsu API. Na przykład geolokalizacja wyświetli prośbę o uprawnienia, gdy zadzwonisz do getCurrentPosition().

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

Powiadomienia będą wysyłane do użytkownika, gdy zadzwonisz 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');
});

Chodzi o to, że interfejs Permission API umożliwia spójne monitorowanie stanu uprawnień przy jednoczesnym obsłudze różnych interfejsów API dostępnych obecnie w internecie.

Dużą zaletą jest to, że możesz tworzyć lepsze interfejsy dla użytkowników, wyświetlając prośby tylko wtedy, gdy jest dla nich oczywiste, dlaczego potrzebujesz dodatkowych uprawnień, i w pełni korzystać z tych interfejsów API, gdy wiesz, że masz przyznane uprawnienia.

Pełny zestaw przykładów znajdziesz tutaj.

Obsługa przeglądarek

Chrome jest pierwszą przeglądarką, która to zaimplementowała. Mozilla planuje wdrożenie tej funkcji, a Microsoft wyraził zainteresowanie interfejsem API.

Znane problemy

  • Jeśli użytkownik odrzuci prośbę o uprawnienia, geolokalizacja nie wyświetli ponownie monitu. Stan uprawnienia pozostaje jednak „prompt”. [bugs.chromium.org]