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]