API Permissions per il Web

Matt Gaunt

Se hai già lavorato con l'API Geolocation, è probabile che tu voglia verificare se hai l'autorizzazione per utilizzare la geolocalizzazione senza visualizzare una richiesta. Questo non era possibile. Hai dovuto richiedere la posizione attuale e questo indica lo stato di autorizzazione o causa la visualizzazione di una richiesta all'utente.

Non tutte le API funzionano in questo modo. L'API Notifications ti consente di controllare lo stato attuale dell'autorizzazione tramite Notification.permission.

Man mano che la piattaforma web cresce nelle API, gli sviluppatori devono disporre di un unico modo standard per controllare lo stato di un'autorizzazione, anziché dover ricordare il funzionamento di ogni API. L'API Permission, disponibile nella versione 43 di Chrome, è intesa come unica modalità standard per controllare lo stato delle autorizzazioni di un'API.

permissions.query()

Controlla lo stato di un'autorizzazione usando il metodo permissions.query(). Verrà restituito lo stato concesso (hai l'autorizzazione), negato (non puoi accedere all'API) o prompt (all'utente deve essere inviata una richiesta). 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 utilizza un oggetto PermissionDescriptor, in cui definisci il nome dell'autorizzazione. La risposta è una soluzione Promise per un oggetto PermissionStatus. Da questo oggetto, puoi controllare lo stato con permissionStatus.state per verificare se è "concesso", "negato" o "prompt". Puoi anche implementare un gestore di eventi per permissionStatus.onchange e gestire le modifiche allo stato delle autorizzazioni.

PermissionDescriptor supportati

Nell'esempio precedente, evidenziamo come eseguire query sullo stato di autorizzazione per la geolocalizzazione con il seguente descrittore di autorizzazione: {name:'geolocation'}.

Il descrittore di autorizzazione a Notification è simile in quanto richiede solo un attributo name: {name:'notifications'}.

Push e midi hanno ciascuno un parametro aggiuntivo specifico per l'API in questione.

Per l'autorizzazione push, puoi fornire un parametro userVisibleOnly. Indica se desideri mostrare una notifica per ogni messaggio push o inviare notifiche push silenziose (al momento Chrome supporta solo i messaggi push con notifiche). Ecco come:

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

Midi consente un parametro sysex. Indica se hai bisogno di e/o ricevere messaggi esclusivi di sistema. Per il midi sarebbe:

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

Richiesta di autorizzazioni

La richiesta dell'autorizzazione all'utente dipende dall'API specifica. Ad esempio, la geolocalizzazione mostra 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, le notifiche verranno visualizzate all'utente quando chiami 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');
});

Il punto è che l'API Permission consente di monitorare in modo coerente lo stato delle autorizzazioni, pur potendo supportare la gamma di API attualmente sul web.

Il grande vantaggio è che consente di creare esperienze migliori per gli utenti, chiedendo solo quando è ovvio per l'utente perché hai bisogno di privilegi aggiuntivi e sfruttando appieno queste API quando sai che ti è stata concessa l'autorizzazione.

Puoi trovare un set completo di esempi qui.

Supporto dei browser

Chrome è il primo browser a implementare questa funzionalità, Mozilla ha in programma di inviarla e Microsoft ha dimostrato interesse per l'API.

Problemi noti

  • La geolocalizzazione non mostrerà più una richiesta se l'utente ignora la richiesta di autorizzazione. Tuttavia, lo stato di autorizzazione rimane "messaggio". [bugs.chromium.org]