API Permissions per il Web

Matt Gaunt

Se hai già utilizzato l'API Geolocation, è probabile che tu abbia voluto verificare di disporre dell'autorizzazione per utilizzare la geolocalizzazione senza visualizzare una richiesta. Semplicemente non era possibile. Dovevi richiedere la posizione attuale, che indica lo stato dell'autorizzazione o attiva una richiesta all'utente.

Non tutte le API funzionano in questo modo. L'API Notifications ha un proprio modo per consentirti di controllare lo stato corrente dell'autorizzazione tramite Notification.permission.

Con la crescita delle API della piattaforma web, è necessario un unico modo standard per consentire agli sviluppatori di controllare lo stato di un'autorizzazione anziché dover ricordare il funzionamento di ogni API. L'API Permission, disponibile nella versione 43 di Chrome, è pensata per essere questo unico modo standard per controllare lo stato delle autorizzazioni di un'API.

permissions.query()

Controlla lo stato di un'autorizzazione utilizzando il metodo permissions.query(). Verrà restituito uno stato di Granted (autorizzato), Denied (accesso all'API bloccato) o Prompt (è necessario chiedere all'utente). 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 accetta un oggetto PermissionDescriptor in cui definisci il nome dell'autorizzazione. La risposta è una promessa che si risolve in un oggetto PermissionStatus. Da questo oggetto, puoi controllare lo stato con permissionStatus.state per "granted", "denied" o "prompt". Puoi anche implementare un gestore di eventi per permissionStatus.onchange e gestire le modifiche allo stato della permission.

PermissionDescriptors supportati

Nell'esempio riportato sopra, viene evidenziato come eseguire una query sullo stato dell'autorizzazione per la geolocalizzazione con il seguente descrittore di autorizzazione: {name:'geolocation'}.

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

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

Per l'autorizzazione push, puoi fornire un parametro userVisibleOnly. Indica se vuoi mostrare una notifica per ogni messaggio push o se vuoi poter inviare notifiche push silenziose (al momento Chrome supporta solo i messaggi push con notifiche). Dovresti utilizzarlo nel seguente modo:

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

Midi consente un parametro sysex. Indica se devi e/o vuoi ricevere messaggi esclusivi del sistema. Per MIDI:

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

Mentre le notifiche richiederebbero all'utente di chiamare 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 essendo in grado di supportare l'ampia gamma di API attualmente disponibili sul web.

Il grande vantaggio è che ti consente di creare esperienze migliori per i tuoi utenti, chiedendo l'autorizzazione solo quando è evidente per l'utente il motivo per cui hai bisogno di privilegi aggiuntivi e sfruttando al meglio queste API quando sai di aver ricevuto l'autorizzazione.

Puoi trovare un insieme completo di esempi qui.

Supporto dei browser

Chrome è il primo browser a implementare questa funzionalità, Mozilla prevede di rilasciarla e Microsoft ha mostrato interesse per l'API.

Problemi noti

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