Meminta izin khusus

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.

Gambar 1: Layar Akses aplikasi khusus di setelan sistem.

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:

  1. Dalam file manifes aplikasi, deklarasikan izin khusus yang mungkin perlu diminta aplikasi Anda.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. Periksa respons pengguna – baik memilih untuk memberikan atau menolak izin khusus – dalam metode onResume().
  8. 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.
Gambar 2: Alur kerja untuk mendeklarasikan dan meminta izin khusus di Android.

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.