Permintaan izin adalah mekanisme utama web untuk melindungi kemampuan canggih yang berpotensi berbahaya bagi privasi dan keamanan pengguna. Dengan dialog izin, browser bertujuan untuk memastikan bahwa pengguna bermaksud mengizinkan situs yang meminta mengakses kemampuan yang dimaksud. Permintaan izin digunakan untuk sejumlah API, termasuk pengambilan media (kamera dan mikrofon), geolokasi, akses penyimpanan, MIDI, dan notifikasi (lihat dokumentasi Permissions API di MDN untuk informasi selengkapnya).
Panduan ini menguraikan praktik terbaik untuk menampilkan permintaan izin kepada pengguna berdasarkan statistik penggunaan Chrome dan riset pengguna. Saat mengikuti praktik terbaik ini, pengguna akan melihat lebih sedikit perintah yang tidak perlu, sehingga developer mendapatkan lebih sedikit keputusan "blokir". Artikel ini ditutup dengan beberapa pola kode untuk menggunakan API yang dibatasi izin, dan praktik terbaik untuk membantu pengguna pulih dari status yang diblokir.
Praktik terbaik perintah
Anda harus meminta izin setelah interaksi pengguna, pada saat pengguna dapat memahami alasan Anda meminta, dan manfaat yang akan mereka dapatkan jika mengizinkan. Jika memungkinkan, Anda harus mengizinkan pengguna menggunakan cara alternatif untuk mencapai fungsi yang sama. Sebagai panduan umum, meminta izin lebih jarang dengan memilih momen saat Anda meminta dengan cermat akan mengurangi kemungkinan pengguna Anda mengalami status pemblokiran yang sulit dipulihkan. Praktik terbaik berikut menawarkan detail selengkapnya tentang setiap saran ini.
Jangan pernah meminta saat halaman dimuat atau tanpa interaksi pengguna
Meminta izin kepada pengguna saat halaman dimuat sama dengan meminta informasi sensitif kepada pelanggan saat mereka masuk ke toko fisik. Melihat permintaan izin (mungkin di antara beberapa permintaan lain untuk pendaftaran newsletter dan izin cookie) adalah pengalaman yang sangat mengganggu. Pengguna tidak akan memahami alasan mereka diminta dan manfaat yang akan mereka dapatkan.
Meskipun aplikasi web tidak dapat berfungsi tanpa akses ke kemampuan tertentu, Anda harus memberikan kesempatan kepada pengguna untuk memahami mengapa hal itu diperlukan. Misalnya, dengan mendahului perintah izin dengan perintah Anda sendiri yang menjelaskan kebutuhan dan memberi pengguna pilihan (misalnya, jika memungkinkan, dengan menyediakan cara alternatif untuk mencapai fungsi yang sama). Jika Anda tidak dapat memikirkan waktu yang lebih tepat untuk meminta izin selain saat pemuatan halaman, ada beberapa contoh di panduan ini.
Situasi yang juga buruk untuk meminta izin adalah tanpa interaksi pengguna sebelumnya (juga dikenal sebagai aktivasi pengguna sementara). Telemetri Chrome menunjukkan bahwa 77% permintaan izin di Chrome Desktop ditampilkan tanpa sinyal niat pengguna yang sangat mendasar, sehingga hanya 12% dari perintah tersebut yang diizinkan. Setelah interaksi pengguna, izinkan tarif meningkat menjadi 30%. Jadi, hanya minta izin setelah pengguna berinteraksi dengan halaman dalam bentuk tertentu.
Hanya minta jika pengguna dapat memahami alasan Anda meminta
Keputusan izin sering kali merupakan keputusan privasi. Berdasarkan framework integritas kontekstual, kami tahu bahwa keputusan privasi bersifat sangat kontekstual. Memahami alasan akses diperlukan dapat dianggap sebagai aspek utama dari hal ini. Oleh karena itu, Anda hanya boleh meminta kemampuan yang diperlukan untuk memberikan nilai kepada pengguna (dan jika pengguna cenderung setuju dengan Anda bahwa mereka memang akan mendapatkan nilai). Selain itu, Anda harus meminta izin pada saat yang jelas bagi pengguna mengapa kemampuan tersebut membantu. Tujuannya adalah untuk memudahkan pengguna memahami konteks penggunaan.
Riset pengguna kami menunjukkan bahwa pengguna cenderung lebih banyak mengizinkan akses saat mereka memahami alasan situs meminta akses dan juga merasakan manfaatnya. Kami juga mendapati bahwa pengguna ingin menjelajahi situs yang tidak dikenal terlebih dahulu untuk lebih memahami nilai yang dapat mereka dapatkan sebagai imbalan atas pemberian akses. Sementara itu, admin akan sering menutup atau mengabaikan dialog izin. Dengan izin satu kali, mereka mungkin mengizinkan satu kunjungan terlebih dahulu. Aplikasi Anda harus mendukung perilaku ini.
Berikan cara alternatif untuk mencapai fungsi yang sama jika memungkinkan
Hasil dari beberapa kemampuan mungkin tidak membantu pengguna. Misalnya, geolokasi perangkat desktop tanpa sensor GPS dapat menampilkan lokasi yang salah karena pengguna terhubung ke VPN. Pengguna lain mungkin tidak ingin memberikan akses papan klip karena mereka lebih suka tetap mengontrol dan memicu peristiwa ini dengan kombinasi tombol secara manual. Dalam situasi seperti ini, penting untuk menyediakan cara alternatif untuk mencapai hasil yang sama. Misalnya, jika meminta izin geolokasi, tawarkan kolom teks tempat pengguna dapat memasukkan kode pos atau alamat mereka sendiri. Dengan papan klip, pastikan elemen yang akan disalin juga dapat dipilih dan disalin melalui kombinasi kunci atau menu konteks. Dengan notifikasi, tawarkan agar orang menerima email, bukan notifikasi push.
Pola yang berguna adalah menggunakan UI alternatif juga sebagai penjelasan mengapa akses dapat bermanfaat. Pengguna yang melihat opsi untuk memasukkan lokasi di samping tombol yang memicu geolocation API akan merasa dapat mengontrol apa yang akan terjadi, karena mereka memahami bahwa mereka juga dapat mengetik alamat mereka. Demikian pula, jika ada pilihan antara menerima notifikasi melalui push atau email, atau bergabung ke rapat tanpa mengizinkan akses kamera dan mikrofon, pengguna akan lebih memahami konsekuensi yang mereka buat secara lebih alami.
Jangan sampai akun Anda diblokir karena sulit untuk memulihkannya
Setelah pengguna memutuskan untuk tidak mengizinkan akses ke kemampuan yang dibatasi izin secara permanen, browser akan mematuhi keputusan tersebut. Jika memungkinkan untuk terus meminta akses, situs yang tidak sopan akan terus membombardir pengguna dengan perintah. Oleh karena itu, pemulihan status kemampuan yang diblokir sengaja memerlukan sedikit upaya dari pengguna. Oleh karena itu, hindari meminta izin kepada pengguna dalam situasi saat kemungkinan banyak pengguna tidak akan mengizinkan akses.
Cara umum untuk melakukannya adalah menggunakan yang disebut pra-perintah, tempat Anda menjelaskan kepada pengguna apa yang akan terjadi dan alasan aplikasi Anda memerlukan kemampuan yang akan Anda minta. Anda hanya boleh memicu permintaan izin browser jika pengguna bereaksi positif terhadap pra-permintaan tersebut. Ada situasi saat pengguna mungkin perlu memulihkan dari status tersebut secara sah. Lihat bagian Membantu pengguna memulihkan dari status diblokir untuk mengetahui informasi selengkapnya.
Perhatikan konten pihak ketiga
Ada sumber permintaan izin yang tidak terduga yang perlu diperhatikan. Jika Anda menyertakan skrip pihak ketiga di situs, skrip tersebut dapat memicu permintaan izin yang tidak ingin Anda tampilkan. Hal ini dapat memengaruhi pengalaman pengguna terhadap situs Anda, terutama jika perintah tersebut tidak mengikuti praktik terbaik yang telah diuraikan. Agar tetap dapat mengontrol pengalaman pengguna, Anda harus membaca dokumentasi library dan skrip pihak ketiga yang ditambahkan ke kode Anda sendiri dengan cermat.
Kapan harus meminta izin
Berikut adalah beberapa contoh momen yang cocok untuk meminta izin, dengan mengikuti praktik terbaik yang telah dijelaskan:
- Setelah pengguna mengklik tombol yang bertuliskan "gunakan lokasi saya" di samping kolom formulir untuk memasukkan alamat secara manual.
- Setelah pengguna berlangganan channel video atau postingan, dan mengklik tombol afirmatif pada dialog yang menjelaskan bahwa info terbaru dapat dikirim sebagai email atau notifikasi ke ponsel atau desktop mereka.
- Setelah pengguna tiba di halaman yang mempersiapkan mereka untuk bergabung ke panggilan video dan menjawab dengan tegas bahwa mereka ingin dilihat dan didengar dengan segera (lihat studi kasus dari Google Meet ini).
Pola kode untuk meminta izin
Mendapatkan izin untuk menggunakan API dilakukan melalui berbagai cara, bergantung pada
API. Beberapa API (biasanya lebih lama) menggunakan model yang membuat browser otomatis meminta izin saat pertama kali Anda mencoba menggunakan API tersebut. Salah satu contohnya adalah
Geolocation API saat memanggil
navigator.geolocation.getCurrentPosition()
.
try {
navigator.geolocation.getCurrentPosition((pos) => console.log(pos));
} catch (error) {
console.error(error);
}
API lain menggunakan model yang mengharuskan Anda meminta izin secara eksplisit terlebih dahulu
menggunakan metode statis. Contohnya adalah
Notification.requestPermission()
untuk mengizinkan notifikasi, atau
DeviceOrientationEvent.requestPermission()
yang kurang umum,
yang merupakan bagian dari Device Orientation Events API. Perlu diperhatikan bahwa beberapa browser mungkin
secara otomatis memberikan izin ke API tertentu. Misalnya, Chrome selalu mengizinkan
akses ke orientasi perangkat, sedangkan Safari menampilkan perintah.
const result = await DeviceOrientationEvent.requestPermission();
console.log(`The user's decision when prompted to use the Device Orientation
Events API was: ${result}.`);
if (result === 'granted') {
/* Use the API. */
}
Cara memeriksa status izin
Untuk memeriksa apakah Anda dapat menggunakan API tertentu, gunakan metode
navigator.permissions.query()
dari Permissions API.
const result = await navigator.permissions.query({ name: 'geolocation' });
console.log(`The result of querying for the Geolocation API is:
${result.state}.`);
if (result.state === 'granted') {
// Use the API.
}
Membantu pengguna memulihkan dari status diblokir
Untuk membantu pengguna memecahkan masalah akses, deteksi bahwa mereka memblokir akses menggunakan Permissions API dan menawarkan panduan tentang cara mengubah setelan. Misalnya, saat pengguna berinteraksi dengan elemen UI yang terkait dengan kemampuan yang dibatasi izin, gunakan pola yang dijelaskan di bagian sebelumnya dan buka dialog pemecahan masalah. Langkah-langkah persis untuk mengubah status izin bervariasi menurut browser, jadi sebaiknya Anda menawarkan deskripsi yang cocok berdasarkan string agen pengguna dan untuk browser yang paling sering digunakan di produk Anda.
Di Chrome, pengguna harus membuka Kontrol Situs dengan mengklik ikon "tuning" di sebelah kiri kolom URL. Di sini, mereka dapat mengaktifkan izin masing-masing. Dalam beberapa kasus, pengguna mungkin harus memuat ulang halaman, sebelum menggunakan kemampuan ini. Dalam hal ini, panel pesan akan ditampilkan di bagian atas jendela yang menawarkan untuk memuat ulang saat mengklik tombol yang sesuai.
UI serupa untuk mengontrol izin ada di browser lain (misalnya, lihat cara kerjanya di Firefox).