Izin Runtime

Di Android 6.0 dan lebih tinggi, model izin aplikasi Android dirancang untuk membuat izin lebih mudah dipahami, berguna, dan aman bagi pengguna. Model ini memindahkan aplikasi Android yang memerlukan izin berbahaya (lihat Izin yang terpengaruh ) dari model izin waktu penginstalan ke model izin waktu proses :

  • Izin waktu instalasi

    ( Android 5.1 dan lebih rendah ) Pengguna memberikan izin berbahaya ke aplikasi saat mereka memasang atau memperbarui aplikasi. Produsen dan operator perangkat dapat melakukan prainstal aplikasi dengan izin yang telah diberikan sebelumnya tanpa memberi tahu pengguna.

  • Izin waktu proses

    ( Android 6.0 – 9 ) Pengguna memberikan izin berbahaya ke suatu aplikasi saat aplikasi sedang berjalan. Kapan izin diminta (seperti saat aplikasi diluncurkan atau saat pengguna mengakses fitur tertentu) bergantung pada aplikasi, namun pengguna memberikan/menolak akses aplikasi ke grup izin tertentu. OEM/operator dapat melakukan prainstal aplikasi, tetapi tidak dapat memberikan izin sebelumnya kecuali mereka melalui proses pengecualian. (Lihat Membuat pengecualian .)

    ( Android 10 ) Pengguna melihat peningkatan transparansi dan memiliki kontrol terhadap aplikasi mana yang memiliki izin runtime pengenalan aktivitas (AR). Pengguna diminta oleh dialog izin runtime untuk selalu mengizinkan, mengizinkan saat digunakan, atau menolak izin. Pada peningkatan OS ke Android 10, izin yang diberikan ke aplikasi dipertahankan, namun pengguna dapat masuk ke Pengaturan dan mengubahnya.

Izin waktu proses mencegah aplikasi mendapatkan akses ke data pribadi tanpa persetujuan pengguna, dan memberi mereka konteks dan visibilitas tambahan mengenai jenis izin yang dicari atau telah diberikan oleh aplikasi. Model runtime mendorong pengembang untuk membantu pengguna memahami mengapa aplikasi memerlukan izin yang diminta, dan memberikan transparansi yang lebih besar sehingga pengguna dapat membuat keputusan yang lebih baik mengenai pemberian atau penolakan izin tersebut.

Izin yang terpengaruh

Android 6.0 dan lebih tinggi memerlukan izin berbahaya untuk menggunakan model izin waktu proses. Izin berbahaya adalah izin berisiko tinggi (misalnya READ_CALENDAR ) yang memberikan aplikasi yang meminta akses ke data pengguna pribadi, atau kontrol atas perangkat, yang dapat berdampak negatif pada pengguna. Untuk melihat daftar izin berbahaya, jalankan perintah:

adb shell pm list permissions -g -d

Android 6.0 dan lebih tinggi tidak mengubah perilaku izin normal . Ini semua adalah izin tidak berbahaya termasuk izin normal, sistem, dan tanda tangan. Izin normal adalah izin dengan risiko lebih rendah (seperti SET_WALLPAPER ) yang memberikan aplikasi yang meminta akses ke fitur tingkat aplikasi terisolasi dengan risiko minimal terhadap aplikasi lain, sistem, atau pengguna. Seperti pada Android 5.1 dan rilis yang lebih rendah, sistem secara otomatis memberikan izin normal kepada aplikasi yang meminta saat instalasi dan tidak meminta persetujuan pengguna. Untuk detail tentang izin, lihat dokumentasi elemen <permission> .

Pembatasan keras dan lunak di Android 10

Selain berbahaya, suatu izin dapat berupa pembatasan keras atau pembatasan lunak. Dalam kedua kasus tersebut, izin terbatas juga harus diizinkan. Pembatasan keras yang tidak diizinkan memiliki perilaku yang berbeda dengan pembatasan lunak yang tidak diizinkan:

  • ( Pembatasan keras ) Aplikasi tidak dapat diberikan izin yang tidak diizinkan.
  • ( Pembatasan lunak ) Aplikasi tanpa daftar yang diizinkan berperilaku sesuai dengan izin khusus yang diminta. Perilaku ini dijelaskan dalam dokumentasi publik untuk izin yang diminta.

Saat memasang aplikasi, penginstal (seperti Google Play Store) dapat memilih untuk tidak mengizinkan izin terbatas untuk aplikasi tersebut. Izin dibatasi oleh platform dan hanya dapat diberikan jika aplikasi memenuhi kriteria khusus sesuai kebijakan platform. Contoh jenis izin yang sangat dibatasi mencakup izin SMS dan Log Panggilan.

Daftar yang diizinkan terjadi selama instalasi, dan kapan

  • sebuah aplikasi telah diinstal selama peningkatan Android 9 ke 10.
  • izin telah diberikan sebelumnya atau aplikasi telah diinstal sebelumnya.
  • izin diperlukan untuk peran yang sudah ditentukan untuk mengizinkan izin tersebut.
  • penginstal (seperti Google Play Store) menandai izin tersebut sebagai diizinkan.

Pengguna tidak dapat mengizinkan izin secara manual.

Persyaratan

Model izin runtime berlaku untuk semua aplikasi, termasuk aplikasi pra-instal dan aplikasi yang dikirimkan ke perangkat sebagai bagian dari proses penyiapan. Persyaratan perangkat lunak aplikasi meliputi:

  • Model izin waktu proses harus konsisten di semua perangkat yang menjalankan Android 6.0 dan lebih tinggi. Hal ini diterapkan oleh pengujian Android Compatibility Test Suite (CTS).
  • Aplikasi harus meminta pengguna untuk memberikan izin aplikasi pada waktu proses. Untuk detailnya, lihat Memperbarui aplikasi . Pengecualian terbatas dapat diberikan kepada aplikasi dan pengendali default yang menyediakan fungsionalitas perangkat dasar yang mendasar untuk pengoperasian perangkat yang diharapkan. (Misalnya, aplikasi Dialer default perangkat untuk menangani ACTION_CALL mungkin memiliki akses izin Telepon.) Untuk detailnya, lihat Membuat pengecualian .
  • Aplikasi yang dimuat sebelumnya dan memiliki izin berbahaya harus menargetkan API level 23 dan mempertahankan model izin waktu proses. Artinya, alur UI selama instalasi aplikasi tidak boleh menyimpang dari implementasi AOSP dari PermissionController, pengguna dapat mencabut izin berbahaya dari aplikasi yang sudah diinstal sebelumnya, dan seterusnya.
  • Aplikasi tanpa kepala harus menggunakan aktivitas untuk meminta izin atau berbagi UID dengan aplikasi lain yang memiliki izin yang diperlukan. Untuk detailnya, lihat Aplikasi tanpa kepala .

Migrasi izin

Izin yang diberikan pada aplikasi di Android 5.x tetap diberikan setelah memperbarui ke Android 6.0 atau lebih tinggi, namun pengguna dapat mencabut izin tersebut kapan saja.

Dalam pembaruan Android 9 hingga 10, semua izin yang dibatasi secara ketat akan diizinkan. Untuk detail tentang penerapan izin pemisahan latar depan/latar belakang, lihat Perubahan privasi Android 10 , dimulai dengan Meminta lokasi latar belakang .

Integrasi

Saat mengintegrasikan model izin waktu proses aplikasi untuk Android 6.0 dan lebih tinggi, Anda harus memperbarui aplikasi yang sudah diinstal sebelumnya agar berfungsi dengan model baru. Anda juga dapat menentukan pengecualian untuk aplikasi yang merupakan pengendali/penyedia default untuk fungsionalitas inti, menentukan izin khusus, dan menyesuaikan tema yang digunakan dalam aplikasi PermissionController .

Memperbarui aplikasi

Aplikasi pada citra sistem dan aplikasi prainstal tidak secara otomatis diberi izin sebelumnya. Kami menganjurkan Anda untuk bekerja sama dengan pengembang aplikasi prainstal (OEM, operator, dan pihak ketiga) untuk melakukan modifikasi aplikasi yang diperlukan menggunakan pedoman pengembang . Secara khusus, Anda harus memastikan bahwa aplikasi prainstal dimodifikasi untuk menghindari kerusakan dan masalah lain saat pengguna mencabut izin.

Aplikasi yang dimuat sebelumnya

Di Android 9 dan yang lebih rendah, aplikasi bawaan yang menggunakan izin berbahaya harus menargetkan API level 23 atau lebih tinggi, dan mempertahankan model izin AOSP Android 6.0 dan lebih tinggi. Misalnya, alur UI selama instalasi aplikasi tidak boleh menyimpang dari implementasi AOSP PermissionController . Pengguna bahkan dapat mencabut izin berbahaya dari aplikasi yang sudah diinstal sebelumnya.

Di Android 6.0 hingga 9, beberapa izin diberikan selama alur instalasi. Namun, mulai tahun 10, alur penginstalan (dilakukan oleh aplikasi Package Installer ) adalah fungsi terpisah dari pemberian izin (di aplikasi Permission Controller ).

Aplikasi tanpa kepala

Hanya aktivitas yang dapat meminta izin. Layanan tidak dapat meminta izin secara langsung.

  • Di Android 5.1 dan yang lebih lama, aplikasi tanpa kepala dapat meminta izin saat diinstal, atau jika aplikasi tersebut sudah diinstal sebelumnya tanpa menggunakan aktivitas.
  • Di Android 6.0 dan lebih tinggi, aplikasi tanpa kepala harus menggunakan salah satu metode berikut untuk meminta izin:
    • Tambahkan aktivitas untuk meminta izin. (Ini adalah metode yang disukai.)
    • Bagikan UID dengan aplikasi lain yang memiliki izin yang diperlukan. Gunakan metode ini hanya ketika Anda memerlukan platform untuk menangani beberapa APK sebagai satu aplikasi.

Tujuannya adalah untuk menghindari kebingungan pengguna dengan permintaan izin yang muncul di luar konteks.

Menyesuaikan UI PackageInstaller

Jika diinginkan, Anda dapat menyesuaikan tema UI Izin dengan memperbarui tema perangkat default ( Theme.DeviceDefault.Settings dan Theme.DeviceDefault.Light.Dialog.NoActionBar ) yang digunakan oleh PackageInstaller. Namun, karena konsistensi sangat penting bagi pengembang aplikasi, Anda tidak dapat menyesuaikan penempatan, posisi, dan aturan kapan UI Izin muncul.

Untuk menyertakan string untuk bahasa tambahan, kontribusikan string ke AOSP.

Membuat pengecualian

Anda dapat memberikan izin terlebih dahulu kepada aplikasi yang merupakan pengendali atau penyedia default untuk fungsi OS inti menggunakan kelas DefaultPermissionGrantPolicy.java di PackageManager. Contoh:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

Mendefinisikan izin khusus

Anda dapat menentukan izin dan grup khusus sebagai normal atau berbahaya dan menambahkan izin khusus OEM/Operator ke grup izin yang ada, seperti yang dapat Anda lakukan di Android 5.x dan rilis sebelumnya.

Di Android 6.0 dan yang lebih baru, jika Anda menambahkan izin berbahaya baru, izin tersebut harus ditangani dengan cara yang sama seperti izin berbahaya lainnya (diminta selama waktu proses aplikasi dan dapat dibatalkan oleh pengguna). Secara khusus:

  • Anda dapat menambahkan izin baru ke grup saat ini, tetapi Anda tidak dapat mengubah pemetaan AOSP dari izin berbahaya dan grup izin berbahaya. (Dengan kata lain, Anda tidak dapat menghapus izin dari grup dan menugaskannya ke grup lain).
  • Anda dapat menambahkan grup izin baru dalam aplikasi yang diinstal pada perangkat, namun Anda tidak dapat menambahkan grup izin baru dalam manifes platform.

Izin pengujian

Android menyertakan pengujian Compatibility Test Suite (CTS) yang memverifikasi izin individu dipetakan ke grup yang benar. Lulus tes ini merupakan persyaratan untuk kompatibilitas Android 6.0 dan CTS yang lebih baru.

Mencabut izin

Di Android 13 dan yang lebih baru, Anda dapat mencabut izin runtime yang diberikan menggunakan Context.revokeSelfPermissionsOnKill() . Pencabutan terjadi secara asinkron dan dipicu ketika aman untuk melakukannya tanpa mengganggu pengguna. Ketika pencabutan dipicu, semua proses yang berjalan di UID pemanggil akan dimatikan.

Penting untuk dipahami bahwa pencabutan izin tunggal mungkin tidak tercermin dalam UI pengaturan, yang menangani izin berdasarkan grup. Biasanya, grup izin akan ditampilkan sebagai diberikan selama setidaknya salah satu izin dalam grup tersebut diberikan. Jika memastikan bahwa pengguna dapat mengonfirmasi pencabutan dalam pengaturan penting bagi Anda, pastikan untuk mencabut setiap izin di grup izin. Untuk mengetahui izin mana yang termasuk dalam grup tertentu, Anda dapat menggunakan PackageManager.getGroupOfPlatformPermission dan PackageManager.getPlatformPermissionsForGroup .

Saat sistem mencabut izin yang diminta, sistem juga akan mencabut izin latar belakang terkait jika tidak ada izin latar depan terkait yang masih diberikan.

Pencabutan tidak akan terpicu selama proses masih berada di latar depan namun juga dapat langsung dipicu dengan mematikan secara manual semua proses yang berjalan di uid saat ini, misalnya menggunakan System.exit() . Namun disarankan untuk membiarkan sistem memutuskan kapan akan memicunya.

Setelah pencabutan izin efektif, Anda dapat memintanya lagi, dan pengguna akan diminta untuk mengabulkan atau menolak permintaan tersebut. Tidak mungkin meminta izin yang sebelumnya telah ditolak oleh pengguna. Meskipun Anda dianjurkan untuk mencabut izin yang saat ini Anda miliki tetapi tidak diperlukan lagi, Anda harus berhati-hati untuk tidak memberi tahu pengguna tentang pencabutan tersebut hingga pencabutan tersebut berlaku efektif.