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, buka Penghentian admin perangkat.
Sejak Android 2.2 (API level 8), platform Android menawarkan pengelolaan perangkat level sistem kemampuan Google Cloud melalui Device Administration API.
Dalam pelajaran ini, Anda akan mempelajari cara membuat aplikasi sadar keamanan yang mengelola akses ke kontennya dengan menerapkan kebijakan pengelolaan perangkat. Secara khusus, aplikasi dapat dikonfigurasi sedemikian rupa sehingga memastikan {i>password<i} layar yang cukup kuat telah disiapkan sebelum menampilkan konten yang dibatasi bagi pengguna.
Menetapkan dan mendeklarasikan kebijakan
Pertama, Anda harus menentukan jenis kebijakan yang akan didukung di tingkat fungsi. Kebijakan dapat mencakup kekuatan sandi kunci layar, batas waktu kedaluwarsa, enkripsi, dll.
Anda harus mendeklarasikan kumpulan kebijakan yang dipilih, yang akan diterapkan oleh aplikasi, di
File res/xml/device_admin.xml
. Manifes Android juga harus mereferensikan
kumpulan kebijakan yang dideklarasikan.
Setiap kebijakan yang dideklarasikan sesuai dengan beberapa metode kebijakan perangkat yang terkait di DevicePolicyManager
(menentukan panjang sandi minimum dan jumlah minimum
karakter huruf besar adalah dua contohnya). Jika aplikasi mencoba memanggil metode yang
kebijakan yang sesuai tidak dideklarasikan dalam XML, hal ini akan menghasilkan SecurityException
saat runtime. Izin lainnya,
seperti force-lock
, tersedia jika aplikasi bermaksud untuk mengelola
jenis kebijakan lain. Seperti yang akan Anda lihat nanti, sebagai bagian
dari proses aktivasi administrator perangkat,
daftar kebijakan yang dideklarasikan akan ditampilkan 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
Buat penerima siaran Administrasi Perangkat, yang akan mendapatkan notifikasi peristiwa terkait kebijakan yang telah Anda nyatakan sebagai dukungan. Aplikasi dapat mengganti metode callback secara selektif.
Dalam aplikasi contoh, Device Admin, saat administrator perangkat dinonaktifkan oleh kebijakan yang dikonfigurasi akan dihapus dari preferensi bersama. Sebaiknya pertimbangkan untuk menerapkan logika bisnis yang relevan dengan kasus penggunaan Anda. Misalnya, aplikasi mungkin membutuhkan beberapa tindakan untuk memitigasi risiko keamanan dengan menerapkan beberapa kombinasi penghapusan data sensitif pada perangkat, menonaktifkan sinkronisasi jarak jauh, memberi tahu administrator, dll.
Agar penerima siaran dapat berfungsi, pastikan untuk mendaftarkannya dalam manifes Android seperti yang digambarkan 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(); } }
Aktifkan administrator perangkat
Sebelum menerapkan kebijakan apa pun, pengguna perlu mengaktifkan aplikasi secara manual sebagai perangkat
Google Workspace for Education. Cuplikan di bawah ini mengilustrasikan cara memicu aktivitas setelan yang
dapat mengaktifkan aplikasi Anda. Sebaiknya sertakan teks penjelasan untuk menyoroti
kepada pengguna mengapa aplikasi meminta untuk menjadi administrator perangkat, dengan menentukan
EXTRA_ADD_EXPLANATION
tambahan di intent.
Gambar 1. Layar aktivasi pengguna di mana Anda dapat memberikan deskripsi kebijakan perangkat Anda.
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 menjadi administrator perangkat dan dapat memulai mengonfigurasi dan menerapkan kebijakan.
Aplikasi juga harus siap menangani situasi pengaturan balik di mana pengguna mengabaikan
proses aktivasi dengan menekan tombol
{i>Cancel<i}, tombol {i>Back<i}, atau tombol {i>Home<i}. Oleh karena itu,
onResume()
di Aktivitas Penyiapan Kebijakan harus memiliki logika
untuk mengevaluasi kembali kondisi dan memberikan opsi Aktivasi Administrator Perangkat kepada pengguna jika
diperlukan.
Mengimplementasikan pengontrol kebijakan perangkat
Setelah administrator perangkat berhasil diaktifkan, aplikasi akan mengonfigurasi Perangkat Policy Manager dengan kebijakan yang diminta. Perlu diperhatikan bahwa kebijakan baru ditambahkan ke Android di setiap rilis. Sangat tepat untuk melakukan pemeriksaan versi di aplikasi Anda jika menggunakan kebijakan baru sambil mendukung versi platform yang lama. Misalnya, Nilai Minimum Sandi Kebijakan Kasus Besar hanya tersedia dengan API level 11 (Honeycomb) dan yang lebih tinggi. Kode berikut menunjukkan cara memeriksa versi pada 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 menerapkan kebijakan. Saat aplikasi tidak memiliki akses dengan {i>password<i} kunci layar yang sebenarnya digunakan, melalui {i>Device Policy Manager API<i} dapat menentukan apakah sandi yang ada mematuhi kebijakan yang diwajibkan. Jika ternyata {i>password<i} kunci layar tidak mencukupi, API administrasi perangkat tidak secara otomatis mengambil sebagai tindakan korektif. Aplikasi bertanggung jawab untuk meluncurkan sistem secara eksplisit layar perubahan sandi di aplikasi Setelan. Contoh:
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). Ketika kebijakan {i>password<i} dikonfigurasi, {i>password<i} tersebut yang lebih lemah dari apa yang ditentukan dalam kebijakan itu akan dinonaktifkan. Misalnya, jika Kualitas sandi “numerik” dikonfigurasi, pengguna dapat memilih PIN (numerik) atau Sandi (alfanumerik) saja.
Setelah perangkat diamankan dengan tepat dengan menyiapkan {i>password<i} layar-kunci yang tepat, aplikasi memungkinkan akses ke konten yang aman.
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)); }