Langsung ke konten

Paling sering dikunjungi

Terakhir dikunjungi

navigation

Praktik Terbaik untuk Izin Aplikasi

Permintaan izin melindungi informasi sensitif yang tersedia dari perangkat dan sebaiknya hanya digunakan ketika membutuhkan akses ke informasi untuk menjalankan aplikasi Anda. Dokumen ini memberikan tip tentang cara Anda bisa memperoleh fungsionalitas yang sama (atau lebih baik) tanpa memerlukan akses ke informasi tersebut; ini bukan pembahasan menyeluruh tentang bagaimana izin bekerja dalam sistem operasi Android.

Untuk tinjauan umum tentang izin Android, lihat Izin dan Data Pengguna. Untuk detail mengenai cara menggunakan izin dalam kode Anda, lihat Bekerja dengan Izin Sistem. Untuk praktik terbaik dalam bekerja dengan identifier unik, lihat Praktik Terbaik untuk Identifier Unik.

Prinsip Penanganan Izin Android

Kami menyarankan untuk mengikuti prinsip-prinsip ini ketika bekerja dengan izin Android:

#1: Hanya gunakan izin yang diperlukan aplikasi Anda untuk bekerja. Bergantung pada bagaimana Anda menggunakan izin, mungkin ada cara lain untuk melakukan apa yang Anda perlukan (maksud sistem, identifier, latar belakang untuk panggilan telepon) tanpa bergantung pada akses ke informasi sensitif.

#2: Perhatikan izin yang diperlukan oleh pustaka. Bila menyertakan pustaka, Anda juga akan mewarisi persyaratan izinnya. Anda harus benar-benar mengetahui apa yang Anda sertakan, izin yang diperlukan, dan penggunaan izin tersebut.

#3: Terus terang. Ketika membuat permintaan izin, jelaskan mengenai apa yang Anda akses, dan alasannya, sehingga pengguna bisa membuat keputusan yang tepat. Sediakan informasi ini bersama permintaan izin termasuk dialog izin pemasangan, waktu proses, atau pembaruan.

#4: Membuat akses sistem jadi eksplisit. Selalu memberikan tanda saat Anda mengakses kemampuan sensitif (misalnya, kamera atau mikrofon) beri tahu pengguna ketika mengumpulkan data dan hindari persepsi bahwa Anda mengumpulkan data secara diam-diam.

Bagian lain dari panduan ini menguraikan aturan-aturan tersebut dalam konteks development aplikasi Android.

Izin dalam Android 6.0+

Android 6.0 Marshmallow memperkenalkan model izin baru yang memungkinkan aplikasi meminta izin dari pengguna pada waktu proses, bukannya sebelum pemasangan. Aplikasi yang mendukung model baru meminta izin ketika aplikasi benar-benar membutuhkan layanan atau data yang dilindungi oleh layanan itu. Meskipun tidak (selalu) mengubah perilaku aplikasi secara menyeluruh, hal ini membuat beberapa perubahan yang relevan tentang bagaimana data pengguna yang sensitif ditangani:

Peningkatan konteks situasional: Pengguna ditanya pada waktu proses, dalam konteks aplikasi Anda, izin untuk mengakses fungsionalitas yang tertutupi oleh grup izin. Pengguna lebih sensitif terhadap konteks izin yang diminta, jika ada ketidakcocokan antara apa yang Anda minta dan tujuan aplikasi, maka sangat penting untuk memberikan penjelasan detail kepada pengguna tentang alasan Anda meminta izin; bila memungkinkan, Anda sebaiknya memberikan penjelasan tentang permintaan itu pada saat meminta izin dan dalam dialog lanjutan jika pengguna menolak permintaan.

Fleksibilitas yang lebih besar dalam pemberian izin: Pengguna bisa menolak akses ke masing-masing izin pada saat izin diminta dan dalam setelan, namun pengguna mungkin tetap terkejut ketika hal ini menyebabkan fungsionalitas rusak. Ada baiknya memantau berapa banyak pengguna yang menolak izin (mis. menggunakan Google Analytics) sehingga Anda bisa menyempurnakan aplikasi Anda untuk menghindari ketergantungan pada izin tersebut atau memberikan penjelasan yang lebih baik tentang mengapa Anda memerlukan izin agar aplikasi Anda berfungsi dengan benar. Anda juga harus memastikan bahwa aplikasi Anda menangani pengecualian yang dibuat bila pengguna menolak permintaan izin atau mematikan izin dalam setelan.

Peningkatan beban transaksional: Pengguna akan diminta untuk memberikan akses bagi masing-masing grup izin dan bukan sebagai satu kumpulan. Sangat penting untuk meminimalkan jumlah izin yang Anda minta karena meningkatkan beban pengguna saat pemberian izin dan meningkatkan kemungkinan bahwa setidaknya salah satu permintaan akan ditolak.

Hindari Meminta Izin yang Tidak Perlu

Bagian ini menyediakan alternatif untuk kasus-penggunaan umum yang akan membantu Anda membatasi jumlah permintaan izin yang dibuat. Karena jumlah dan tipe permintaan izin terlihat-pengguna memengaruhi unduhan dibandingkan dengan aplikasi sejenis lain yang meminta izin lebih sedikit, tindakan terbaik adalah menghindari permintaan izin untuk fungsionalitas yang tidak diperlukan.

Akses kamera/kontak dengan permintaan pengguna realtime

Dalam kasus ini, Anda memerlukan sesekali akses ke kamera atau informasi kontak perangkat dan tidak keberatan menanyakan ke pengguna setiap kali Anda memerlukan akses.

Jika kebutuhan untuk mengakses data pengguna tidak sering — dengan kata lain, pengguna tidak merasa terganggu saat ditampilkan dialog waktu proses setiap kali Anda memerlukan akses data — Anda bisa menggunakan permintaan berbasis maksud. Android menyediakan beberapa maksud sistem yang bisa digunakan aplikasi tanpa memerlukan izin karena pengguna dapat memilih apa, jika ada, yang boleh diakses aplikasi pada saat diterbitkan permintaan berbasis maksud.

Misalnya, tipe tindakan maksud dari MediaStore.ACTION_IMAGE_CAPTURE atau MediaStore.ACTION_VIDEO_CAPTURE bisa digunakan untuk menjepret foto atau merekam video tanpa secara langsung menggunakan objek Kamera (atau membutuhkan izin). Dalam hal ini, maksud sistem akan meminta izin pengguna atas nama Anda setiap kali foto dijepret.

Berjalan di latar belakang setelah kehilangan fokus audio

Dalam kasus ini, aplikasi Anda harus ke latar belakang ketika pengguna mendapat panggilan telepon dan memfokuskan kembali hanya ketika panggilan berhenti.

Pendekatan umum dalam kasus ini - misalnya, pemutar media mematikan suara atau berhenti sejenak selama panggilan telepon - adalah untuk mendengarkan perubahan dalam status panggilan menggunakan PhoneStateListener atau mendengarkan siaran android.intent.action.PHONE_STATE. Masalah dengan solusi ini adalah bahwa ini memerlukan izin READ_PHONE_STATE, yang memaksa pengguna untuk memberikan akses ke berbagai macam data sensitif seperti ID perangkat keras SIM dan perangkat serta nomor telepon dari panggilan masuk.

Anda bisa menghindari hal ini dengan meminta AudioFocus untuk aplikasi Anda, yang tidak memerlukan izin eksplisit (karena tidak mengakses informasi sensitif). Cukup taruh kode yang diperlukan ke latar belakang audio Anda di penangan kejadian onAudioFocusChange() dan kode akan berjalan secara otomatis ketika OS mengalihkan fokus audio. Dokumen yang lebih lengkap tentang cara melakukannya dapat ditemukan di sini.

Menentukan perangkat tempat instance Anda berjalan

Dalam kasus ini, Anda memerlukan identifier unik untuk menentukan perangkat tempat instance aplikasi berjalan.

Aplikasi mungkin memiliki preferensi khusus-perangkat atau perpesanan (mis., menyimpan daftar putar khusus-perangkat untuk pengguna di awan sehingga pengguna dapat memiliki daftar putar yang berbeda untuk di mobil dan di rumah). Solusi yang lazim adalah dengan memanfaatkan identifier perangkat seperti Device IMEI, namun ini memerlukan grup izin Device ID and call information (PHONE dalam M+). Itu juga menggunakan identifier yang tidak dapat disetel ulang dan dibagikan ke semua aplikasi.

Ada dua alternatif untuk menggunakan tipe identifier ini:

  1. Gunakan com.google.android.gms.iid InstanceID API. getInstance(Context context).getID() akan mengembalikan identifier perangkat yang unik untuk instance aplikasi Anda. Hasilnya adalah identifier dalam cakupan instance aplikasi yang bisa digunakan sebagai kunci saat menyimpan informasi tentang aplikasi dan disetel ulang jika pengguna memasang-ulang aplikasi.
  2. Buat identifier Anda sendiri yang dalam cakupan storage aplikasi menggunakan fungsi sistem dasar seperti randomUUID().

Membuat identifier unik untuk promosi maupun analitik pengguna

Dalam hal ini, Anda memerlukan identifier unik untuk membuat profil bagi pengguna yang tidak terdaftar dalam aplikasi Anda (mis., untuk penargetan iklan atau mengukur konversi).

Membuat profil untuk pengiklanan dan analitik pengguna terkadang membutuhkan identifier yang dibagikan bersama aplikasi lain. Solusi yang lazim untuk ini melibatkan pemanfaatan identifier perangkat seperti Device IMEI, yang memerlukan grup izin Device ID and call information (PHONE dalam API level 23+) dan tidak dapat disetel ulang oleh pengguna. Dalam setiap kasus ini, selain menggunakan identifier tidak-dapat disetel ulang dan meminta izin yang mungkin tampak aneh bagi pengguna, Anda juga akan melanggar ketentuan Kebijakan Program Developer Play.

Sayangnya dalam kasus ini, menggunakan com.google.android.gms.iid InstanceID API atau fungsi sistem untuk membuat ID dalam cakupan aplikasi bukan solusi yang tepat karena ID mungkin perlu dibagikan ke seluruh aplikasi. Solusi alternatifnya adalah dengan menggunakan Advertising Identifier yang tersedia dari kelas AdvertisingIdClient.Info melalui metode getId(). Anda bisa membuat objek AdvertisingIdClient.Info menggunakan metode getAdvertisingIdInfo(Context) dan memanggil metode getId() untuk menggunakan identifier. Perhatikan, metode ini bersifat memblokir, sehingga Anda sebaiknya tidak memanggilnya dari thread utama; penjelasan detail tentang metode ini tersedia di sini.

Mengetahui Pustaka yang Anda Gunakan

Terkadang izin diperlukan oleh pustaka yang Anda gunakan dalam aplikasi. Misalnya, iklan dan pustaka analitik mungkin memerlukan akses ke grup izin Location atau Identity untuk mengimplementasikan fungsionalitas yang diperlukan. Namun dari sudut pandang pengguna, permintaan izin berasal dari aplikasi Anda, bukan pustaka.

Sama seperti ketika pengguna memilih aplikasi yang menggunakan izin lebih sedikit untuk fungsionalitas yang sama, developer harus meninjau pustaka mereka dan memilih SDK pihak ketiga yang tidak menggunakan izin yang tidak perlu. Misalnya, cobalah untuk menghindari pustaka yang memerlukan grup izin Identity kecuali jika ada alasan jelas yang dihadapi pengguna mengapa aplikasi membutuhkan izin tersebut. Pada khususnya, untuk pustaka yang menyediakan fungsionalitas lokasi, pastikan Anda tidak diwajibkan untuk meminta izin FINE_LOCATION kecuali jika Anda menggunakan fungsionalitas penargetan berbasis lokasi.

Terus Terang

Anda harus memberi tahu pengguna tentang apa yang Anda akses dan alasannya. Penelitian menunjukkan bahwa pengguna lebih nyaman dengan permintaan izin jika mereka tahu mengapa aplikasi membutuhkannya. 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-beda berdasarkan pada apakah permintaan tersebut diperlukan untuk mendukung fungsionalitas inti aplikasi atau apakah untuk membagikan informasi itu dengan jaringan periklanan atau perusahaan analitik.1

Berdasarkan penelitian kelompoknya, Profesor Jason Hong dari CMU menyimpulkan bahwa, secara umum:

...ketika orang mengetahui mengapa aplikasi menggunakan sesuatu yang sensitif seperti lokasi mereka — misalnya, untuk periklanan tertarget — itu membuat mereka lebih nyaman dibandingkan jika hanya diberi tahu, sebuah aplikasi menggunakan lokasi mereka.1

Sehingga, jika Anda hanya menggunakan sebagian kecil panggilan API yang termasuk dalam grup izin, akan membantu ketika Anda secara eksplisit mencantumkan daftar izin yang digunakan, dan alasannya. Misalnya:

Dalam kondisi tertentu, juga menguntungkan untuk mengizinkan pengguna mengetahui tentang akses data sensitif secara real-time. Misalnya, jika Anda mengakses kamera atau mikrofon, ide yang baik untuk mengizinkan pengguna mengetahui dengan ikon notifikasi di suatu tempat dalam aplikasi Anda, atau dalam baki notifikasi (jika aplikasi berjalan di latar belakang), sehingga tidak tampak seperti Anda sedang mengumpulkan data secara diam-diam.

Yang terakhir, jika Anda perlu meminta izin untuk mengerjakan sesuatu dalam aplikasi, namun alasannya tidak jelas bagi pengguna, temukan cara agar pengguna mengetahui mengapa Anda memerlukan izin paling sensitif.

Referensi

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

Situs ini menggunakan cookies untuk menyimpan preferensi Anda tentang bahasa di situs tertentu dan opsi tampilan.

Dapatkan berita dan tips terbaru dari developer Android yang akan membantu Anda mencapai kesuksesan di Google Play.

* Wajib Diisi

Hore!

Ikuti Google Developers di WeChat

Buka situs ini dalam bahasa ?

Anda meminta halaman dalam bahasa , namun preferensi bahasa untuk situs ini adalah .

Ingin mengubah preferensi bahasa dan mengakses situs ini dalam bahasa ? Jika nanti Anda ingin mengubah preferensi bahasa, gunakan menu bahasa di bagian bawah setiap halaman.

Kelas ini memerlukan tingkat API atau yang lebih tinggi

Dokumen ini tersembunyi karena level API yang Anda pilih untuk dokumentasi ini adalah . Anda dapat mengubah level API dokumentasi dengan pemilih di atas menu navigasi sebelah kiri.

Untuk informasi lebih lanjut tentang menentukan level API yang diperlukan aplikasi Anda, baca Mendukung Versi Platform Yang Berbeda.

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)