Permissions API untuk Web

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

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

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

permissions.query()

Periksa status izin menggunakan metode permissions.query(). Tindakan ini akan menampilkan status diberikan (Anda memiliki izin), ditolak (Anda diblokir agar tidak dapat mengakses API), atau meminta (pengguna harus 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 ini mengambil objek PermissionDescriptor, tempat Anda menentukan nama izin. Responsnya adalah Promise yang diselesaikan ke objek PermissionStatus. Dari objek ini, Anda dapat memeriksa status dengan permissionStatus.state untuk 'granted', 'denied', atau 'prompt'. Anda juga dapat mengimplementasikan pengendali peristiwa untuk permissionStatus.onchange dan menangani perubahan pada status izin.

PermissionDescriptor 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 menyediakan parameter userVisibleOnly. Hal 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 adalah:

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 ditampilkan kepada 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 Permission API memungkinkan cara yang konsisten untuk memantau status izin sekaligus dapat mendukung rentang API yang saat ini ada di web.

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

Anda dapat menemukan kumpulan contoh lengkap di sini.

Dukungan Browser

Chrome adalah browser pertama yang menerapkan hal ini, Mozilla berencana menghadirkannya, dan Microsoft telah menunjukkan minat pada API tersebut.

Masalah Umum

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