Izin khusus melindungi akses ke resource sistem yang sangat sensitif atau tidak terkait langsung dengan privasi pengguna. Izin ini berbeda dengan izin waktu penginstalan dan izin runtime.
Beberapa contoh izin khusus meliputi:
- Menjadwalkan alarm yang tepat.
- Menampilkan dan menggambar di atas aplikasi lain.
- Mengakses semua data penyimpanan.
Aplikasi yang mendeklarasikan izin khusus ditampilkan di halaman Akses aplikasi khusus di setelan sistem (gambar 1). Untuk memberikan izin khusus ke aplikasi, pengguna harus membuka halaman ini: Setelan > Aplikasi > Akses aplikasi khusus.
Alur Kerja
Untuk meminta izin khusus, lakukan hal berikut:
- Dalam file manifes aplikasi, deklarasikan izin khusus yang mungkin perlu diminta aplikasi Anda.
- Rancang UX aplikasi Anda agar tindakan tertentu dalam aplikasi dikaitkan dengan izin khusus tertentu. Beri tahu pengguna tindakan yang mungkin mengharuskan mereka memberikan izin bagi aplikasi Anda untuk mengakses data pribadi pengguna.
- Tunggu pengguna untuk memanggil tugas atau tindakan di aplikasi Anda yang memerlukan akses ke data pribadi pengguna tertentu. Pada saat itu, aplikasi Anda dapat meminta izin khusus yang diperlukan untuk mengakses data tersebut.
- Periksa apakah pengguna telah memberikan izin khusus yang diperlukan aplikasi Anda. Untuk melakukannya, gunakan fungsi pemeriksaan kustom setiap izin. Jika telah diberikan, aplikasi Anda dapat mengakses data pribadi pengguna. Jika belum, lanjutkan ke langkah berikutnya. Catatan: Anda harus memeriksa apakah Anda memiliki izin setiap kali melakukan operasi yang memerlukan izin tersebut.
- Berikan alasan kepada pengguna dalam elemen UI yang dengan jelas menerangkan data yang ingin diakses oleh aplikasi Anda dan manfaat yang dapat diberikan aplikasi kepada pengguna jika mereka memberikan izin khusus tersebut. Selain itu, karena aplikasi Anda mengarahkan pengguna ke setelan sistem untuk memberikan izin, sertakan juga petunjuk singkat yang menjelaskan cara pengguna dapat memberikan izin di sana. UI alasan harus menyediakan opsi yang jelas bagi pengguna untuk memilih tidak ikut memberikan izin. Setelah pengguna mengonfirmasi alasannya, lanjutkan ke langkah berikutnya.
- Minta izin khusus yang diperlukan aplikasi Anda untuk mengakses data pribadi pengguna. Hal ini mungkin melibatkan intent ke halaman yang sesuai dalam setelan sistem tempat pengguna dapat memberikan izin. Tidak seperti izin runtime, tidak ada dialog izin pop-up.
- Periksa respons pengguna – baik memilih untuk memberikan atau menolak izin
khusus – dalam metode
onResume()
. - Jika pengguna memberikan izin untuk aplikasi, Anda dapat mengakses data pribadi pengguna. Jika pengguna menolak izin, turunkan pengalaman aplikasi Anda secara halus agar aplikasi menyediakan fungsi bagi pengguna tanpa informasi yang dilindungi oleh izin tersebut.
Meminta izin khusus
Tidak seperti izin runtime, pengguna
harus memberikan izin khusus dari halaman Akses Aplikasi Khusus di
setelan sistem. Aplikasi dapat mengarahkan pengguna ke sana menggunakan intent, yang menjeda aplikasi
dan meluncurkan halaman setelan yang sesuai untuk izin khusus tertentu.
Setelah pengguna kembali ke aplikasi, aplikasi dapat memeriksa apakah izin telah
diberikan dalam fungsi onResume()
.
Kode contoh berikut menunjukkan cara meminta izin khusus
SCHEDULE_EXACT_ALARMS
dari pengguna:
val alarmManager = getSystemService<AlarmManager>()!!
when {
// if permission is granted, proceed with scheduling exact alarms…
alarmManager.canScheduleExactAlarms() -> {
alarmManager.setExact(...)
}
else -> {
// ask users to grant the permission in the corresponding settings page
startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
}
}
Kode contoh untuk memeriksa izin dan menangani keputusan pengguna di onResume()
:
override fun onResume() {
// ...
if (alarmManager.canScheduleExactAlarms()) {
// proceed with the action (setting exact alarms)
alarmManager.setExact(...)
}
else {
// permission not yet approved. Display user notice and gracefully degrade
your app experience.
alarmManager.setWindow(...)
}
}
Praktik terbaik dan tips
Bagian berikut memberikan beberapa pertimbangan dan praktik terbaik saat meminta izin khusus.
Setiap izin memiliki metode pemeriksaan sendiri
Operasi izin khusus berbeda dengan izin
runtime. Sebagai gantinya,
lihat halaman referensi
API izin dan gunakan fungsi pemeriksaan akses
kustom untuk setiap izin khusus. Contohnya mencakup
AlarmManager#canScheduleExactAlarms()
untuk
izin
SCHEDULE_EXACT_ALARMS
dan
Environment#isExternalStorageManager()
untuk
izin
MANAGE_EXTERNAL_STORAGE
.
Meminta dalam konteks
Serupa dengan izin runtime, aplikasi harus meminta izin khusus
dalam konteks saat pengguna meminta tindakan tertentu yang memerlukan
izin. Misalnya, tunggu untuk meminta izin SCHEDULE_EXACT_ALARMS
hingga pengguna menjadwalkan email untuk dikirim pada waktu tertentu.
Menjelaskan permintaan
Berikan alasan sebelum mengalihkan ke setelan sistem. Karena pengguna keluar dari aplikasi untuk sementara guna memberikan izin khusus, tampilkan UI dalam aplikasi sebelum Anda meluncurkan intent ke halaman Akses Aplikasi Khusus di setelan sistem. UI ini harus menerangkan dengan jelas alasan aplikasi memerlukan izin dan cara pengguna memberikannya di halaman setelan.