API Permissions per il Web

Matt Gaunt

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]