Permissions API for the web

Jeśli zdarzyło Ci się już korzystać z interfejsu API geolokalizacji, prawdopodobnie chcesz sprawdzić, czy masz uprawnienia do korzystania z geolokalizacji bez wyświetlania pytania. To po prostu niemożliwe. Trzeba było zażądać bieżącej pozycji, która wskazuje stan uprawnień lub powoduje wyświetlenie użytkownikowi prośby.

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

W miarę rozwoju platformy internetowej deweloperzy powinni mieć standardowy sposób sprawdzania stanu uprawnień, zamiast zapamiętywać sposób działania każdego z interfejsów API. Interfejs Permission API jest dostępny w Chrome w wersji 43. Powinno to zapewniać standardowy sposób sprawdzania stanu uprawnień interfejsu API.

permissions.query()

Sprawdź stan uprawnień, korzystając z metody permissions.query(). Spowoduje to zwrócenie stanu „Przyznano” (masz uprawnienia), Odmowa (brak dostępu do interfejsu API) lub Komunikat (użytkownik musi zostać poproszony). 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 definiuje się nazwę uprawnienia. Odpowiedź to obietnica wskazująca obiekt PermissionStatus. Za pomocą tego obiektu możesz sprawdzić stan za pomocą polecenia permissionStatus.state: „przyznano”, „odrzucono” lub „prompt”. Możesz też wdrożyć moduł obsługi zdarzeń dla permissionStatus.onchange i obsługować zmiany stanu uprawnienia.

Obsługiwane deskryptory uprawnień

W przykładzie powyżej pokazujemy, jak przesłać zapytanie o stan uprawnień na potrzeby geolokalizacji za pomocą tego deskryptora uprawnień: {name:'geolocation'}.

Deskryptor uprawnień do powiadomień jest podobny, ponieważ wymaga tylko atrybutu nazwy: {name:'notifications'}.

Zarówno komunikaty Push, jak i midi mają dodatkowy parametr związany z danym interfejsem API.

Aby uzyskać uprawnienia do przekazywania powiadomień, możesz podać parametr userVisibleOnly. Ta wartość określa, czy chcesz wyświetlać powiadomienia o każdej wiadomości push, czy też chcesz mieć możliwość wysyłania cichych powiadomień push (obecnie Chrome obsługuje tylko wiadomości push z powiadomieniami). Użyjesz go w ten sposób:

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

Midi dopuszcza parametr sysex. Ta wartość określa, czy chcesz lub/lub otrzymywać wiadomości przeznaczone wyłącznie dla systemu. W przypadku midi będzie to:

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

Żądanie uprawnień

Uzyskanie uprawnień do użytkownika zależy od konkretnego interfejsu API. Na przykład w przypadku geolokalizacji wyświetli się prośba o przyznanie uprawnień, gdy wywołasz metodę getCurrentPosition().

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

Natomiast gdy dzwonisz pod numer requestPermission(), użytkownik zobaczy powiadomienie.

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ójny sposób monitorowania stanu uprawnień przy jednoczesnej obsłudze wielu różnych interfejsów API dostępnych obecnie w internecie.

Główną zaletą takiego rozwiązania jest to, że zwiększa to wygodę użytkowników i wyświetla komunikat tylko wtedy, gdy jest oczywiste dla użytkownika, dlaczego potrzebuje dodatkowych uprawnień. Możesz też w pełni korzystać z tych interfejsów API, gdy masz pewność, że przyznano Ci odpowiednie uprawnienia.

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

Obsługa przeglądarek

Chrome to pierwsza przeglądarka, która stosuje ten interfejs, Mozilla planuje udostępnić go i Microsoft jest zainteresowany tym interfejsem API.

Znane problemy

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