Meminimalkan permintaan izin

Sebagai bagian untuk meningkatkan kualitas aplikasi dan melindungi privasi pengguna, sebaiknya minimalkan penggunaan izin di aplikasi Anda. Hal ini membantu pengguna menemukan dan menggunakan aplikasi berkualitas tinggi yang menyediakan lingkungan pengguna yang aman dan terlindungi.

Meminta izin dari pengguna akan mengganggu alur penggunaan, dan pengguna dapat menolak permintaan Anda. Selain itu, setiap kali mendeklarasikan izin baru, Anda harus meninjau cara aplikasi Anda meminta dan membagikan data pengguna. Beberapa API dan izin yang sangat sensitif mengharuskan Anda memberikan pengungkapan dalam aplikasi terkait akses, pengumpulan, penggunaan, dan pembagian data oleh Anda.

Ada beberapa cara alternatif untuk meminimalkan penggunaan izin:

  • Mendeklarasikan izin yang memberikan informasi lokasi sementara, bukan informasi lokasi presisi, jika aplikasi Anda hanya memerlukan perkiraan lokasi.
  • Memanggil API yang memungkinkan aplikasi Anda menjalankan fungsi yang diinginkan tanpa mendeklarasikan izin.
  • Memanggil intent atau pengendali peristiwa tertentu untuk menjalankan fungsi, bukan mendeklarasikan izin.
  • Sistem ini menyediakan kontrak bawaan untuk berbagai operasi file dan juga mendukung kontrak kustom.

Jika Anda harus mendeklarasikan izin, selalu hormati keputusan pengguna dan berikan cara untuk menurunkan pengalaman aplikasi Anda secara halus.

Halaman ini menjelaskan beberapa kasus penggunaan yang dapat dipenuhi aplikasi Anda tanpa mendeklarasikan perlunya izin apa pun.

Menampilkan tempat-tempat terdekat

Aplikasi Anda mungkin perlu mengetahui perkiraan lokasi pengguna. Hal ini berguna untuk menampilkan informasi berbasis lokasi, seperti restoran di sekitar.

Beberapa kasus penggunaan hanya memerlukan perkiraan kasar lokasi perangkat. Dalam situasi ini, lakukan salah satu tindakan berikut, bergantung pada seberapa sering aplikasi memerlukan informasi berbasis lokasi:

  • Jika aplikasi Anda sering kali memerlukan lokasi, deklarasikan izin ACCESS_COARSE_LOCATION. Izin tersebut memberikan perkiraan lokasi perangkat dari layanan lokasi, seperti yang dijelaskan dalam dokumentasi tentang akurasi perkiraan lokasi.
  • Jika aplikasi Anda lebih jarang memerlukan lokasi, atau hanya sekali, pertimbangkan untuk meminta pengguna memasukkan alamat atau kode pos.

Kasus penggunaan lainnya memerlukan perkiraan lokasi perangkat yang lebih presisi. Situasi ini adalah satu-satunya situasi ketika Anda dapat mendeklarasikan izin ACCESS_FINE_LOCATION.

Membuat dan mengakses file

Android memungkinkan Anda membuat dan mengakses file tanpa perlu mendeklarasikan izin apa pun yang terkait dengan penyimpanan atau sensor.

Membuka file media

Aplikasi Anda mungkin mengizinkan pengguna memilih dari foto dan video mereka, seperti untuk lampiran pesan atau foto profil.

Untuk mendukung fungsi ini, gunakan pemilih foto. Pemilih foto tidak memerlukan izin runtime untuk menggunakannya. Saat pengguna berinteraksi dengan pemilih foto untuk memilih foto atau video yang akan dibagikan ke aplikasi Anda, sistem akan memberikan akses baca sementara ke URI yang terkait dengan file media yang dipilih.

Jika aplikasi Anda perlu mengakses file media tanpa menggunakan pemilih foto, Anda tidak perlu mendeklarasikan izin penyimpanan apa pun:

Membuka dokumen

Aplikasi Anda mungkin menampilkan dokumen yang dibuat oleh pengguna, baik di aplikasi Anda maupun di aplikasi lain. Contoh umumnya adalah file teks.

Dalam situasi ini, deklarasikan READ_EXTERNAL_STORAGE hanya untuk kompatibilitas dengan perangkat lama. Tetapkan android:maxSdkVersion ke 28.

Bergantung pada aplikasi yang membuat dokumen, lakukan salah satu hal berikut:

Mengambil foto

Pengguna dapat mengambil gambar di aplikasi Anda menggunakan aplikasi kamera sistem yang telah diinstal sebelumnya.

Dalam situasi ini, jangan deklarasikan izin CAMERA. Sebagai gantinya, panggil tindakan intent ACTION_IMAGE_CAPTURE.

Merekam video

Pengguna dapat merekam video di aplikasi Anda menggunakan aplikasi kamera sistem yang telah diinstal sebelumnya.

Dalam situasi ini, jangan deklarasikan izin CAMERA. Sebagai gantinya, panggil tindakan intent ACTION_VIDEO_CAPTURE.

Mengidentifikasi perangkat yang menjalankan instance aplikasi

Instance tertentu dari aplikasi Anda mungkin perlu mengetahui perangkat yang menjalankannya. Hal ini berguna untuk aplikasi yang memiliki preferensi atau pesan khusus perangkat, seperti playlist yang berbeda untuk perangkat TV dan perangkat wearable.

Dalam situasi ini, jangan mengakses IMEI perangkat secara langsung. Sebenarnya, Anda tidak dapat melakukannya mulai Android 10. Sebagai gantinya, lakukan salah satu hal berikut:

  • Dapatkan ID perangkat unik untuk instance aplikasi Anda menggunakan library ID Instance.
  • Buat ID Anda sendiri yang dicakup dalam penyimpanan aplikasi. Gunakan fungsi sistem dasar, seperti randomUUID().

Menyambungkan dengan perangkat melalui Bluetooth

Aplikasi Anda mungkin menawarkan pengalaman yang ditingkatkan dengan mentransfer data ke perangkat lain melalui Bluetooth.

Untuk mendukung fungsi ini, jangan deklarasikan izin ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION, atau BLUETOOTH_ADMIN. Sebagai gantinya, gunakan penyambungan perangkat pendamping.

Memasukkan nomor kartu pembayaran secara otomatis

Layanan Google Play menawarkan library yang memungkinkan Anda memasukkan nomor kartu pembayaran secara otomatis. Daripada mendeklarasikan izin CAMERA, Anda dapat menggunakan library pengenalan kartu debit dan kredit.

Mengelola panggilan telepon dan pesan teks

Layanan Android dan Google Play menawarkan library yang memungkinkan Anda mengelola panggilan telepon dan pesan teks tanpa perlu mendeklarasikan izin apa pun terkait panggilan telepon atau pesan SMS.

Memasukkan kunci sandi sekali pakai secara otomatis

Untuk menyederhanakan alur kerja autentikasi 2 langkah, aplikasi Anda dapat otomatis memasukkan kunci sandi sekali pakai yang dikirim ke perangkat pengguna untuk memverifikasi identitas mereka.

Untuk mendukung fungsi ini di perangkat yang didukung oleh layanan Google Play, jangan deklarasikan izin READ_SMS. Sebagai gantinya, gunakan SMS Retriever API.

Di perangkat lain, jika aplikasi Anda menargetkan Android 8.0 (API level 26) atau yang lebih baru, buat token khusus aplikasi menggunakan createAppSpecificSmsToken(). Teruskan token ini ke aplikasi atau layanan lain yang dapat mengirimkan pesan SMS verifikasi.

Memasukkan nomor telepon pengguna secara otomatis

Untuk memberikan dukungan atau penjualan yang lebih efisien, aplikasi Anda dapat mengizinkan pengguna memasukkan nomor telepon perangkat secara otomatis.

Untuk mendukung fungsi ini di perangkat yang didukung oleh layanan Google Play, jangan deklarasikan izin READ_PHONE_STATE. Sebagai gantinya, gunakan library Phone Number Hint.

Memfilter panggilan telepon

Untuk meminimalkan gangguan yang tidak perlu bagi pengguna, aplikasi Anda dapat memfilter spam pada panggilan telepon.

Untuk mendukung fungsi ini, jangan deklarasikan izin READ_PHONE_STATE. Sebagai gantinya, gunakan CallScreeningService API.

Menelepon

Aplikasi Anda mungkin menawarkan kemampuan untuk melakukan panggilan telepon dengan mengetuk informasi kontak.

Untuk mendukung fungsi ini, gunakan tindakan intent ACTION_DIAL, bukan tindakan ACTION_CALL. ACTION_CALL memerlukan izin waktu penginstalan CALL_PHONE, yang mencegah perangkat yang tidak dapat melakukan panggilan, seperti beberapa tablet, agar tidak menginstal aplikasi Anda.

Menjeda media saat aplikasi Anda terganggu

Jika pengguna menerima panggilan telepon, atau jika alarm yang dikonfigurasi pengguna muncul, aplikasi Anda harus menjeda pemutaran media apa pun hingga aplikasi Anda mendapatkan kembali fokus audio.

Untuk mendukung fungsi ini, jangan deklarasikan izin READ_PHONE_STATE. Sebagai gantinya, terapkan pengendali peristiwa onAudioFocusChange(), yang berjalan secara otomatis saat sistem mengalihkan fokus audio. Pelajari selengkapnya tentang cara menerapkan fokus audio.

Memindai kode batang

Android menyertakan dukungan untuk Google Code Scanner API, yang didukung oleh layanan Google Play agar Anda dapat mendekode kode batang tanpa mendeklarasikan izin kamera. API ini membantu menjaga privasi pengguna dan mengurangi kemungkinan Anda perlu membuat UI kustom untuk kasus penggunaan pemindaian kode batang.

API ini memindai kode batang dan hanya menampilkan hasil pemindaian ke aplikasi Anda. Gambar diproses di perangkat, dan Google tidak menyimpan data apa pun atau memindai hasil.

Jika aplikasi Anda harus mendukung kasus penggunaan atau format kode batang yang kompleks, atau jika memerlukan UI kustom, gunakan API pemindaian kode batang ML Kit.

Mereset izin yang tidak digunakan

Android menyediakan beberapa cara untuk mereset izin runtime yang tidak digunakan ke status default dan ditolak.

Baca panduan desain.

Meminta izin runtime

Setelah mengevaluasi bahwa aplikasi perlu mendeklarasikan dan meminta izin runtime, ikuti alur kerja khusus untuk melakukannya.

Baca panduan desain.

Menjelaskan alasan aplikasi memerlukan izin

Penggunaan requestPermissions() akan menampilkan dialog yang menunjukkan izin mana yang ingin digunakan aplikasi Anda, tetapi tidak menjelaskan alasannya sehingga mungkin membingungkan pengguna.

Untuk detail dan rekomendasi selengkapnya tentang cara dan waktu untuk menampilkan dialog ini, baca panduan desain.

Menangani penolakan izin

Aplikasi Anda harus membantu pengguna memahami implikasi penolakan izin sebelum dan sesudah mereka memilih untuk melakukannya.

Baca panduan desain.