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:
- Jika Anda mengakses file media yang dibuat oleh aplikasi, aplikasi tersebut sudah memiliki akses ke file ini di penyimpanan media.
- Jika Anda mengakses file media yang dibuat oleh aplikasi lain, gunakan Storage Access Framework.
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:
- Jika pengguna membuat dokumen di aplikasi Anda, akses dokumen tersebut secara langsung.
- Jika pengguna membuat dokumen di aplikasi lain, gunakan Storage Access Framework.
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.