Se hai lavorato con l'API Geolocation in precedenza, è probabile che tu voglia controllare di avere l'autorizzazione a utilizzare Geolocalizzazione senza generare un prompt. Semplicemente non era possibile. Dovevi richiedere la posizione attuale per indicare lo stato dell'autorizzazione o causare la visualizzazione di un prompt all'utente.
Non tutte le API funzionano in questo modo. L'API Notifications ha un proprio modo per consentire di controllare lo stato attuale dell'autorizzazione tramite Notification.permission.
Man mano che la piattaforma web cresce nel settore delle API, è necessario un unico metodo standard per agli sviluppatori di controllare lo stato di un'autorizzazione anziché doversi ricordare di come funziona ogni singola API. L'API Authorization, disponibile nella versione 43 di Chrome, è solo un metodo standardizzato per verificare lo stato delle autorizzazioni di un'API.
permissions.query()
Controlla lo stato di un'autorizzazione utilizzando il metodo permissions.query()
. In questo modo
restituire lo stato di "Concesso" (hai l'autorizzazione), "Negato" (ovvero non puoi
che accede all'API) o
dell'utente (le esigenze dell'utente
il prompt. Ad esempio:
// 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);
};
});
Il metodo di query prende un
PermissionDescriptor
in cui definisci il nome dell'autorizzazione. La risposta è una promessa
risolvendo un
PermissionStatus
. Da questo oggetto, puoi controllare lo stato con permissionStatus.state
per "granted", "denied" o "prompt". Puoi anche implementare un evento
per permissionStatus.onchange
e gestire le modifiche all'autorizzazione
stato.
PermissionDescriptors supportati
Nell'esempio precedente, evidenziamo come eseguire una query sullo stato di autorizzazione per
geolocalizzazione con il seguente descrittore di autorizzazione: {name:'geolocation'}
.
Il descrittore dell'autorizzazione alle notifiche è simile in quanto richiede solo un
attributo nome: {name:'notifications'}
.
Push e midi hanno ciascuno specifico dell'API.
Per l'autorizzazione push, puoi fornire un parametro userVisibleOnly
.
Questa opzione indica se vuoi mostrare una notifica per ogni messaggio push
o essere in grado di inviare notifiche push silenziose (al momento solo Chrome
supporta i messaggi push con notifiche). In questo caso:
navigator.permissions.query({name:'push', userVisibleOnly:true})
Il parametro MIDI consente un parametro sysex
. Indica se devi e/o ricevere
messaggi esclusivi di sistema. Per il midi sarebbe:
navigator.permissions.query({name:'midi', sysex:true})
Richiesta di autorizzazioni
La richiesta di autorizzazione all'utente dipende dall'API specifica. Ad esempio:
la geolocalizzazione mostrerà una richiesta di autorizzazione quando chiami getCurrentPosition()
.
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
Invece, se chiami requestPermission()
, le notifiche avvisano l'utente.
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');
});
Il punto è che l'API Permission consente un modo coerente per monitorare stato delle autorizzazioni, supportando al contempo la gamma di API attualmente attive sul web.
Il grande vantaggio è che consente di creare esperienze migliori per agli utenti, chiedendogli solo quando è ovvio perché hanno bisogno di privilegiati e di trarre il massimo vantaggio da queste API quando si è è stata concessa l'autorizzazione.
Puoi trovare una serie completa di esempi qui.
Supporto dei browser
Chrome è il primo browser a implementare questa funzionalità, Mozilla ha in programma la spedizione e Microsoft ha mostrato interesse per l'API.
Problemi noti
- La geolocalizzazione non mostrerà nuovamente un messaggio se l'utente ignora l'autorizzazione richiesta. Tuttavia, lo stato di autorizzazione rimane "prompt". [bugs.chromium.org]