Penghentian admin perangkat. Beberapa kebijakan admin telah ditandai sebagai tidak digunakan lagi saat dipanggil oleh admin perangkat. Untuk mempelajari lebih lanjut dan melihat opsi migrasi, lihat Penghentian admin perangkat.
Mulai Android 2.2 (API level 8), platform Android menawarkan kemampuan pengelolaan perangkat tingkat sistem melalui Device Administration API.
Dalam kursus ini, Anda akan mempelajari cara membuat aplikasi sadar keamanan yang mengelola akses ke kontennya dengan menerapkan kebijakan pengelolaan perangkat. Secara khusus, aplikasi dapat dikonfigurasi sehingga memastikan sandi kunci layar dengan kekuatan yang memadai telah disiapkan sebelum menampilkan konten yang dibatasi kepada pengguna.
Menentukan dan mendeklarasikan kebijakan
Pertama, Anda perlu menentukan jenis kebijakan yang didukung di tingkat fungsional. Kebijakan dapat mencakup kekuatan sandi kunci layar, waktu tunggu habis masa berlaku, enkripsi, dll.
Anda harus mendeklarasikan kumpulan kebijakan yang dipilih, yang akan diterapkan oleh aplikasi, dalam
file res/xml/device_admin.xml
. Manifes Android juga harus merujuk ke
kumpulan kebijakan yang dideklarasikan.
Setiap kebijakan yang dideklarasikan sesuai dengan beberapa metode kebijakan perangkat terkait di DevicePolicyManager
(dua contoh adalah menentukan panjang sandi minimum dan jumlah minimum
karakter berhuruf besar). Jika aplikasi mencoba memanggil metode yang
kebijakannya terkait tidak dideklarasikan dalam XML, hal ini akan mengakibatkan SecurityException
saat runtime. Izin lainnya,
seperti force-lock
, tersedia jika aplikasi bermaksud mengelola
jenis kebijakan lainnya. Seperti yang akan Anda lihat nanti, sebagai bagian dari proses aktivasi administrator perangkat,
daftar kebijakan yang dideklarasikan akan disajikan kepada pengguna di layar sistem.
Cuplikan berikut mendeklarasikan kebijakan batas sandi di res/xml/device_admin.xml
:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> </uses-policies> </device-admin>
XML deklarasi kebijakan yang dirujuk dalam manifes Android:
<receiver android:name=".Policy$PolicyAdmin" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
Membuat penerima administrasi perangkat
Membuat penerima siaran Administrasi Perangkat, yang akan mendapatkan notifikasi peristiwa terkait kebijakan yang telah Anda nyatakan untuk didukung. Aplikasi dapat mengganti metode callback secara selektif.
Dalam aplikasi contoh, Device Admin, saat administrator perangkat dinonaktifkan oleh pengguna, kebijakan yang dikonfigurasi akan dihapus dari preferensi bersama. Anda harus mempertimbangkan untuk menerapkan logika bisnis yang relevan dengan kasus penggunaan Anda. Misalnya, aplikasi mungkin melakukan beberapa tindakan untuk mengurangi risiko keamanan dengan menerapkan beberapa kombinasi penghapusan data sensitif di perangkat, menonaktifkan sinkronisasi jarak jauh, memberi tahu administrator, dll.
Agar penerima siaran berfungsi, pastikan untuk mendaftarkannya dalam manifes Android seperti yang diilustrasikan dalam cuplikan di atas.
Kotlin
class PolicyAdmin : DeviceAdminReceiver() { override fun onDisabled(context: Context, intent: Intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent) context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE).edit().apply { clear() apply() } } }
Java
public static class PolicyAdmin extends DeviceAdminReceiver { @Override public void onDisabled(Context context, Intent intent) { // Called when the app is about to be deactivated as a device administrator. // Deletes previously stored password policy. super.onDisabled(context, intent); SharedPreferences prefs = context.getSharedPreferences(APP_PREF, Activity.MODE_PRIVATE); prefs.edit().clear().commit(); } }
Mengaktifkan administrator perangkat
Sebelum menerapkan kebijakan apa pun, pengguna harus mengaktifkan aplikasi secara manual sebagai administrator
perangkat. Cuplikan di bawah menggambarkan cara memicu aktivitas setelan tempat
pengguna dapat mengaktifkan aplikasi Anda. Sebaiknya sertakan teks penjelasan untuk menyoroti
kepada pengguna alasan aplikasi meminta untuk menjadi administrator perangkat, dengan menentukan
tambahan EXTRA_ADD_EXPLANATION
dalam intent.
Gambar 1. Layar aktivasi pengguna tempat Anda dapat memberikan deskripsi kebijakan perangkat.
Kotlin
if (!policy.isAdminActive()) { val activateDeviceAdminIntent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN) activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin() ) // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, resources.getString(R.string.device_admin_activation_message) ) startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN) }
Java
if (!policy.isAdminActive()) { Intent activateDeviceAdminIntent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, policy.getPolicyAdmin()); // It is good practice to include the optional explanation text to // explain to user why the application is requesting to be a device // administrator. The system will display this message on the activation // screen. activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, getResources().getString(R.string.device_admin_activation_message)); startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN); }
Jika pengguna memilih "Aktifkan", aplikasi akan menjadi administrator perangkat dan dapat mulai mengonfigurasi serta menerapkan kebijakan.
Aplikasi juga harus siap untuk menangani situasi kemunduran ketika pengguna meninggalkan
proses aktivasi dengan menekan tombol Cancel, tombol Kembali, atau tombol Beranda. Oleh karena itu,
onResume()
di Aktivitas Penyiapan Kebijakan harus memiliki logika
untuk mengevaluasi kembali kondisi dan menampilkan opsi Aktivasi Administrator Perangkat kepada pengguna jika
diperlukan.
Mengimplementasikan pengontrol kebijakan perangkat
Setelah administrator perangkat berhasil diaktifkan, aplikasi akan mengonfigurasi Pengelola Kebijakan Perangkat dengan kebijakan yang diminta. Perlu diingat bahwa kebijakan baru ditambahkan ke Android pada setiap rilis. Melakukan pemeriksaan versi pada aplikasi adalah langkah yang tepat jika Anda menggunakan kebijakan baru sambil mendukung versi platform yang lebih lama. Misalnya, kebijakan Huruf Besar Minimum Sandi hanya tersedia dengan API level 11 (Honeycomb) dan yang lebih baru. Kode berikut menunjukkan cara memeriksa versi saat runtime.
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var policyAdmin: ComponentName dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager policyAdmin = ComponentName(context, PolicyAdmin::class.java) dpm.apply { setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]) setPasswordMinimumLength(policyAdmin, passwordLength) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase) } }
Java
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName policyAdmin = new ComponentName(context, PolicyAdmin.class); dpm.setPasswordQuality(policyAdmin, PASSWORD_QUALITY_VALUES[passwordQuality]); dpm.setPasswordMinimumLength(policyAdmin, passwordLength); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { dpm.setPasswordMinimumUpperCase(policyAdmin, passwordMinUpperCase); }
Pada tahap ini, aplikasi dapat memberlakukan kebijakan tersebut. Meskipun aplikasi tidak memiliki akses ke sandi kunci layar sebenarnya yang digunakan, melalui Device Policy Manager API, aplikasi dapat menentukan apakah sandi yang ada memenuhi kebijakan yang diwajibkan. Jika ternyata sandi kunci layar yang ada tidak cukup, Device Administration API tidak secara otomatis mengambil tindakan korektif. Aplikasi bertanggung jawab untuk secara eksplisit meluncurkan layar perubahan sandi sistem di aplikasi Setelan. Misalnya:
Kotlin
if (!dpm.isActivePasswordSufficient) { // Triggers password change screen in Settings. Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) } }
Java
if (!dpm.isActivePasswordSufficient()) { ... // Triggers password change screen in Settings. Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent); }
Biasanya, pengguna dapat memilih dari salah satu mekanisme kunci yang tersedia, seperti Tidak Ada, Pola, PIN (numerik), atau Sandi (alfanumerik). Saat kebijakan sandi dikonfigurasi, jenis sandi yang lebih lemah daripada yang ditentukan dalam kebijakan tersebut akan dinonaktifkan. Misalnya, jika kualitas sandi "Numerik" dikonfigurasi, pengguna hanya dapat memilih sandi PIN (numerik) atau Sandi (alfanumerik).
Setelah perangkat diamankan secara benar dengan menyiapkan sandi kunci layar yang tepat, aplikasi akan mengizinkan akses ke konten yang diamankan.
Kotlin
when { !dpm.isAdminActive(policyAdmin) -> { // Activates device administrator. ... } !dpm.isActivePasswordSufficient -> { // Launches password set-up screen in Settings. ... } else -> { // Grants access to secure content. ... startActivity(Intent(context, SecureActivity::class.java)) } }
Java
if (!dpm.isAdminActive(..)) { // Activates device administrator. ... } else if (!dpm.isActivePasswordSufficient()) { // Launches password set-up screen in Settings. ... } else { // Grants access to secure content. ... startActivity(new Intent(context, SecureActivity.class)); }