Praktik terbaik izin aplikasi

Permintaan izin melindungi informasi sensitif yang tersedia pada perangkat dan hanya boleh digunakan jika akses ke informasi diperlukan untuk fungsi aplikasi Anda. Dokumen ini memberikan tips tentang cara agar Anda dapat mencapai fungsi yang sama (atau lebih baik) tanpa memerlukan akses ke informasi tersebut; ini bukan diskusi menyeluruh tentang cara kerja izin dalam sistem operasi Android.

Untuk pembahasan umum lainnya tentang izin Android, lihat Ringkasan izin. Untuk detail tentang cara menangani izin dalam kode, lihat Meminta izin aplikasi.

Izin di Android 6.0 dan yang lebih baru

Di Android 6.0 (API level 23) dan yang lebih tinggi, aplikasi dapat meminta izin dari pengguna saat runtime, bukan sebelum penginstalan. Hal ini memungkinkan aplikasi meminta izin saat aplikasi benar-benar memerlukan layanan atau data yang dilindungi oleh layanan tersebut. Meskipun tidak (selalu) mengubah perilaku aplikasi secara menyeluruh, model ini mengakibatkan beberapa perubahan yang relevan dengan cara menangani data sensitif pengguna:

Konteks situasional meningkat

Pengguna dimintai izin pada saat runtime, dalam konteks aplikasi Anda, untuk mengakses fungsi yang dicakup oleh grup izin tersebut. Pengguna akan lebih peka terhadap konteks permintaan izin, dan jika ada ketidakcocokan antara izin yang Anda minta dengan tujuan aplikasi Anda, maka akan lebih penting lagi untuk memberikan penjelasan terperinci kepada pengguna mengenai alasan Anda meminta izin tersebut. Jika memungkinkan, sebaiknya berikan penjelasan tentang permintaan ini baik pada saat meminta izin maupun dalam dialog tindak lanjut jika pengguna menolak permintaan tersebut.

Untuk meningkatkan kemungkinan diterimanya permintaan izin, cukup minta izin saat fitur tertentu diperlukan. Misalnya, hanya minta akses mikrofon saat pengguna mengklik tombol mikrofon. Pengguna kemungkinan besar memberikan izin yang mereka harapkan.

Fleksibilitas yang lebih besar dalam memberikan izin

Pengguna dapat menolak akses ke izin tertentu pada saat diminta dan di setelan, tetapi ia mungkin tetap akan terkejut saat penolakan ini menyebabkan kerusakan fungsi. Sebaiknya pantau jumlah pengguna yang menolak izin (misalnya, menggunakan Google Analytics) agar Anda dapat memfaktorkan ulang aplikasi guna menghindari ketergantungan pada izin tersebut, atau berikan penjelasan yang lebih baik tentang alasan aplikasi memerlukan izin agar dapat berfungsi dengan baik. Anda juga perlu memastikan bahwa aplikasi Anda menangani pengecualian saat pengguna menolak permintaan izin atau menonaktifkan izin pada setelan.

Beban transaksi meningkat

Pengguna diminta memberikan akses untuk grup izin satu per satu, bukan sebagai kumpulan. Oleh karena itu, penting sekali bagi Anda untuk meminimalkan jumlah izin yang diminta. Hal ini meningkatkan beban pengguna untuk memberikan izin sehingga memperbesar kemungkinan bahwa setidaknya satu permintaan akan ditolak.

Izin yang meminta menjadi pengendali default

Beberapa aplikasi bergantung pada akses ke informasi pengguna sensitif terkait log panggilan dan pesan SMS. Jika ingin meminta izin khusus untuk log panggilan dan pesan SMS serta memublikasikan aplikasi ke Play Store, Anda harus meminta pengguna menetapkan aplikasi Anda sebagai pengendali default untuk fungsi sistem inti sebelum meminta izin runtime ini.

Untuk informasi selengkapnya tentang pengendali default, termasuk cara menampilkan permintaan pengendali default kepada pengguna, lihat panduan tentang izin yang hanya digunakan dalam pengendali default.

Mengetahui library yang Anda gunakan

Terkadang, library yang Anda gunakan dalam aplikasi memerlukan izin. Misalnya, library iklan dan analisis mungkin memerlukan akses ke grup izin LOCATION untuk mengimplementasikan fungsi yang diperlukan. Namun, dari sudut pandang pengguna, permintaan izin ini berasal dari aplikasi Anda, bukan dari library.

Sama seperti pengguna yang memilih aplikasi dengan permintaan izin lebih sedikit untuk fungsi yang sama, developer perlu meninjau library mereka dan memilih SDK pihak ketiga yang tidak menggunakan izin yang tidak perlu. Misalnya, jika Anda menggunakan library yang menyediakan fungsi lokasi, pastikan Anda tidak meminta izin FINE_LOCATION kecuali jika Anda menggunakan fungsi penargetan berbasis lokasi.

Membatasi akses latar belakang ke lokasi

Saat aplikasi Anda berjalan di latar belakang, akses ke lokasi harus diwajibkan untuk fungsi inti aplikasi dan menunjukkan manfaat yang jelas bagi pengguna.

Pengujian untuk kedua model izin

Di Android 6.0 (API level 23) dan yang lebih tinggi, pengguna memberikan dan mencabut izin aplikasi pada saat runtime, bukan saat menginstal aplikasi. Akibatnya, Anda harus menguji aplikasi dalam berbagai kondisi. Sebelum Android 6.0, Anda bisa berasumsi bahwa selama bisa berjalan, aplikasi Anda memiliki semua izin yang dideklarasikan dalam manifes aplikasi. Sekarang, pengguna dapat mengaktifkan atau menonaktifkan izin untuk semua aplikasi, terlepas dari level API. Anda harus melakukan pengujian untuk memastikan aplikasi berfungsi dengan benar di berbagai skenario izin.

Tips berikut akan membantu Anda mengidentifikasi masalah kode terkait izin pada perangkat yang menjalankan API level 23 atau lebih tinggi:

  • Identifikasi izin aplikasi Anda saat ini dan lokasi kode yang terkait.
  • Uji alur pengguna pada semua layanan dan data yang dilindungi izin.
  • Uji dengan berbagai kombinasi izin yang diberikan atau dicabut. Misalnya, aplikasi kamera mungkin mencantumkan CAMERA, READ_CONTACTS, dan ACCESS_FINE_LOCATION dalam manifesnya. Anda harus menguji aplikasi dengan setiap izin tersebut diaktifkan dan dinonaktifkan, untuk memastikan aplikasi bisa menangani semua konfigurasi izin dengan baik.
  • Gunakan alat adb untuk mengelola izin dari command line:
    • Cantumkan daftar izin dan status menurut grupnya:
      $ adb shell pm list permissions -d -g
    • Beri atau cabut satu atau beberapa izin:
      $ adb shell pm [grant|revoke] <permission-name> ...
  • Analisis aplikasi Anda untuk mengidentifikasi layanan yang menggunakan izin.

Referensi lainnya