Praktik terbaik izin aplikasi

Permintaan izin melindungi informasi sensitif yang tersedia dari perangkat dan hanya boleh digunakan saat akses ke informasi diperlukan agar aplikasi Anda berfungsi. Dokumen ini memberikan tips tentang cara Anda dapat memperoleh fungsi yang sama (atau lebih baik) tanpa memerlukan akses ke informasi tersebut. Ini bukan diskusi lengkap tentang cara kerja izin di 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

Android 6.0 Marshmallow memperkenalkan model izin baru yang memungkinkan aplikasi meminta izin dari pengguna saat dijalankan, bukan sebelum penginstalan. Aplikasi yang mendukung model baru ini 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.

Fleksibilitas yang lebih besar dalam memberikan izin: Pengguna dapat menolak akses ke izin tertentu pada saat diminta dan dalam 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 yang dibuat saat pengguna menolak permintaan izin atau menonaktifkan izin pada setelan.

Beban transaksi meningkat: Pengguna akan 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 karena hal tersebut akan meningkatkan beban pengguna untuk memberikan izin dan kemungkinan bahwa setidaknya salah 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.

Menjelaskan alasan Anda memerlukan izin

Dialog izin yang ditampilkan oleh sistem ketika Anda memanggil requestPermissions() menunjukkan jenis izin yang diperlukan aplikasi, tetapi tidak menyebutkan alasannya. Pada beberapa kasus, hal ini mungkin membingungkan pengguna. Sebaiknya jelaskan kepada pengguna alasan aplikasi Anda memerlukan izin sebelum memanggil requestPermissions().

Penelitian menunjukkan bahwa pengguna jauh lebih nyaman dengan permintaan izin jika mereka tahu alasan aplikasi memerlukannya. Sebuah studi pengguna menunjukkan bahwa:

...kesediaan pengguna untuk memberikan izin bagi aplikasi seluler tertentu sangat dipengaruhi oleh tujuan yang terkait dengan izin tersebut. Misalnya, kesediaan pengguna untuk memberikan akses ke lokasinya akan berbeda berdasarkan apakah permintaan tersebut diperlukan untuk mendukung fungsi inti aplikasi, atau untuk membagikan informasi ini kepada jaringan periklanan atau perusahaan analisis.1

Setelah berkolaborasi dengan pihak lain dalam penelitian tentang topik ini, Profesor Jason Hong dari CMU menyimpulkan bahwa, secara umum:

...orang akan merasa lebih nyaman jika mengetahui alasan aplikasi menggunakan informasi sensitif seperti lokasi, misalnya untuk periklanan bertarget, daripada sekadar diberi tahu bahwa aplikasi sedang menggunakan lokasinya.1

Akibatnya, jika Anda hanya menggunakan sebagian kecil panggilan API yang termasuk dalam sebuah grup izin, sebaiknya cantumkan secara eksplisit manakah dari izin tersebut yang Anda gunakan, dan apa alasannya. Contoh:

  • Jika Anda hanya menggunakan lokasi sementara, beri tahukan hal ini kepada pengguna dalam deskripsi aplikasi atau artikel bantuan aplikasi Anda.
  • Jika Anda memerlukan akses ke pesan SMS untuk menerima kode autentikasi yang melindungi pengguna dari penipuan, beri tahukan hal ini kepada pengguna dalam deskripsi aplikasi dan/atau saat pertama kali Anda mengakses data.

    Catatan: Jika aplikasi Anda menargetkan Android 8.0 (API level 26) atau yang lebih tinggi, jangan minta izin READ_SMS sebagai bagian dari proses verifikasi kredensial pengguna. Sebagai gantinya, buat token khusus aplikasi menggunakan createAppSpecificSmsToken(), lalu teruskan token ini ke aplikasi atau layanan lain yang dapat mengirimkan pesan SMS verifikasi.

Dalam kondisi tertentu, ada baiknya juga memberi tahu pengguna tentang akses data sensitif secara real time. Misalnya, jika Anda mengakses kamera atau mikrofon, sebaiknya beri tahu pengguna melalui ikon notifikasi di suatu tempat dalam aplikasi Anda, atau dalam tray notifikasi (jika aplikasi berjalan di latar belakang), sehingga tidak tampak seperti Anda mengumpulkan data secara diam-diam.

Yang terakhir, jika Anda perlu meminta izin agar sesuatu dalam aplikasi Anda dapat berjalan, tetapi alasannya tidak jelas bagi pengguna, temukan cara agar pengguna mengetahui mengapa Anda memerlukan izin paling sensitif tersebut.

Pengujian untuk kedua model izin

Mulai Android 6.0 (API level 23), pengguna memberikan dan mencabut izin aplikasi pada saat runtime, bukan saat menginstal aplikasi. Akibatnya, Anda harus menguji aplikasi dalam berbagai macam kondisi. Sebelum Android 6.0, Anda bisa berasumsi bahwa selama bisa berjalan, aplikasi Anda memiliki semua izin yang dideklarasikan dalam manifes aplikasi. Mulai Android 6.0, pengguna dapat mengaktifkan atau menonaktifkan izin untuk aplikasi apa pun, bahkan aplikasi yang menargetkan API level 22 atau versi yang lebih lama. Anda harus menjalankan pengujian untuk memastikan aplikasi berfungsi dengan benar, baik memiliki izin maupun tidak.

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

Referensi

[1] Modeling Users’ Mobile App Privacy Preferences: Restoring Usability in a Sea of Permission Settings, by J. Lin B. Liu, N. Sadeh dan J. Hong. Dalam Proceedings of SOUPS 2014.