Permissions API untuk Web

Jika sebelumnya Anda telah menggunakan Geolocation API, kemungkinan Anda ingin memeriksa apakah Anda memiliki izin untuk menggunakan Geolokasi tanpa menyebabkan perintah. Hal ini tidak mungkin dilakukan. Anda harus meminta posisi saat ini dan ini akan menunjukkan status izin atau menyebabkan perintah ditampilkan kepada pengguna.

Tidak semua API berfungsi dengan cara ini. Notifications API memiliki cara tersendiri untuk memungkinkan Anda memeriksa status izin saat ini melalui Notification.permission.

Seiring berkembangnya platform web dalam API, perlu ada satu cara standar bagi developer untuk memeriksa status izin, bukan harus mengingat cara kerja setiap API. Permission API, yang tersedia di Chrome versi 43, dimaksudkan sebagai satu cara standar untuk memeriksa status izin API.

permissions.query()

Periksa status izin menggunakan metode permissions.query(). Tindakan ini akan menampilkan status granted (Anda memiliki izin), denied (Anda diblokir agar tidak mengakses API), atau prompt (pengguna perlu diminta). Contoh:

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

Metode kueri menggunakan objek PermissionDescriptor, tempat Anda menentukan nama izin. Responsnya adalah Promise yang me-resolve ke objek PermissionStatus. Dari objek ini, Anda dapat memeriksa status dengan permissionStatus.state untuk 'granted', 'denied', atau 'prompt'. Anda juga dapat menerapkan pengendali peristiwa untuk permissionStatus.onchange dan menangani perubahan pada status izin.

PermissionDescriptors yang Didukung

Pada contoh di atas, kita menyoroti cara membuat kueri status izin untuk geolokasi dengan deskripsi izin berikut: {name:'geolocation'}.

Deskripsi izin Notifikasi serupa karena hanya memerlukan atribut nama: {name:'notifications'}.

Push dan midi masing-masing memiliki parameter tambahan yang khusus untuk API tersebut.

Untuk izin push, Anda dapat memberikan parameter userVisibleOnly. Ini menunjukkan apakah Anda ingin menampilkan notifikasi untuk setiap pesan push atau dapat mengirim notifikasi push senyap (Saat ini Chrome hanya mendukung pesan push dengan notifikasi). Anda akan menggunakannya seperti ini:

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

Midi memungkinkan parameter sysex. Ini menunjukkan apakah Anda perlu dan/atau menerima pesan eksklusif sistem. Untuk midi, ini akan menjadi:

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

Meminta Izin

Meminta izin dari pengguna bergantung pada API tertentu. Misalnya, geolokasi akan menampilkan dialog izin saat Anda memanggil getCurrentPosition().

navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

Sedangkan notifikasi akan meminta pengguna saat Anda memanggil 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');
});

Intinya di sini adalah bahwa Permission API memungkinkan cara yang konsisten untuk memantau status izin sekaligus dapat mendukung berbagai API yang saat ini ada di web.

Keuntungan besar dari hal ini adalah Anda dapat membuat pengalaman yang lebih baik bagi pengguna, hanya meminta izin saat pengguna jelas mengetahui alasan Anda memerlukan hak istimewa tambahan dan memanfaatkan API ini sepenuhnya saat Anda tahu bahwa Anda telah diberi izin.

Anda dapat menemukan kumpulan contoh lengkap di sini.

Dukungan Browser

Chrome adalah browser pertama yang menerapkannya, Mozilla berencana meluncurkannya, dan Microsoft telah menunjukkan minatnya pada API ini.

Masalah Umum

  • Geolokasi tidak akan menampilkan kembali perintah jika pengguna menutup permintaan izin. Namun, status izin tetap 'prompt'. [bugs.chromium.org]