Membuat pengontrol kebijakan perangkat

Panduan ini menjelaskan cara mengembangkan pengontrol kebijakan perangkat (DPC) untuk perangkat dalam deployment Android Enterprise. Aplikasi DPC, yang sebelumnya dikenal sebagai pengontrol kebijakan kerja, mengontrol kebijakan perangkat lokal dan aplikasi sistem di perangkat.

Tentang DPC

Dalam deployment perusahaan Android, perusahaan mempertahankan kontrol atas berbagai aspek perangkat pengguna, seperti mengisolasi informasi terkait pekerjaan dari data pribadi pengguna, melakukan pra-konfigurasi aplikasi yang disetujui untuk lingkungan, atau menonaktifkan kemampuan perangkat (misalnya, kamera).

Sebagai EMM, Anda mengembangkan aplikasi DPC yang dapat digunakan oleh pelanggan bersama konsol EMM dan server Anda. Pelanggan Anda men-deploy DPC ke perangkat pengguna yang mereka kelola. DPC bertindak sebagai jembatan antara konsol EMM (dan server) dan perangkat. Admin menggunakan konsol EMM untuk melakukan berbagai tugas, termasuk mengonfigurasi setelan perangkat dan aplikasi.

DPC membuat dan mengelola profil kerja pada perangkat tempatnya diinstal. Profil kerja mengenkripsi informasi terkait pekerjaan dan memisahkannya dari aplikasi dan data pribadi pengguna. Sebelum membuat profil kerja, DPC juga dapat menyediakan Akun Google Play terkelola untuk digunakan di perangkat.

Panduan ini menunjukkan cara mengembangkan DPC yang dapat membuat dan mengelola profil kerja.

Support Library DPC untuk EMM

DPC Support Library untuk EMM terdiri dari class utilitas dan helper yang memfasilitasi penyediaan dan pengelolaan perangkat Android di lingkungan perusahaan. Library ini memungkinkan Anda memanfaatkan fitur penting di aplikasi DPC:

  • Dukungan penyediaan Akun Google Play Terkelola: Penyediaan Akun Google Play terkelola dari aplikasi DPC mengharuskan aplikasi layanan Google Play dan Google Play memenuhi persyaratan versi minimum. Namun, mengupdate aplikasi ini bisa menjadi proses yang rumit. Support library DPC menangani update aplikasi ini, dan juga memastikan kompatibilitas dengan update mendatang untuk proses penyediaan Akun Google Play terkelola. Lihat dukungan penyediaan Akun Google Play terkelola untuk mengetahui detailnya.
  • Dukungan Konfigurasi Terkelola: Menggunakan Play EMM API untuk menangani konfigurasi terkelola untuk aplikasi yang disetujui adalah cara termudah untuk menerapkan konfigurasi terkelola pada DPC Anda. Dengan DPC Support Library, Anda dapat mendelegasikan tugas untuk menerapkan konfigurasi terkelola (sebelumnya, pembatasan aplikasi) seperti yang ditetapkan oleh admin menggunakan konsol EMM Anda, ke Google Play. Penggunaan Play EMM API untuk menangani konfigurasi terkelola memungkinkan konfigurasi aplikasi diterapkan secara atomik selama penginstalan. Lihat Menerapkan konfigurasi terkelola ke aplikasi kerja untuk mengetahui informasi selengkapnya tentang cara mengaktifkan kemampuan ini di DPC Anda.

Ikuti langkah-langkah di bawah ini untuk mendownload library. Tugas-tugas yang diperinci dalam panduan ini mengasumsikan penggunaan DPC Support Library.

Mendownload Support Library DPC

Untuk menggunakan Support Library DPC, download library dari komunitas Penyedia EMM Android Enterprise. Anda harus menambahkan library ke file build.gradle dan menangani dependensi lainnya saat mem-build aplikasi DPC. Misalnya, library memerlukan library klien autentikasi Layanan Google Play 11.4.0.

  1. Tambahkan library ke file build.gradle:

    Groovy

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Tambahkan library klien autentikasi Layanan Google Play 11.4.0 ke file build.gradle:

    Groovy

    implementation 'com.google.android.gms:play-services-auth:11.4.0'
    

    Kotlin

    implementation("com.google.android.gms:play-services-auth:11.4.0")
    

Library ini memerlukan izin tertentu agar dapat berjalan, jadi Anda harus menambahkannya ke manifes aplikasi DPC saat mengupload ke Google Play:

  <uses-permission android:name=
      "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
  <uses-permission android:name=
      "android.permission.GET_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.MANAGE_ACCOUNTS"/>
  <uses-permission android:name=
      "android.permission.WRITE_SYNC_SETTINGS"/>
  <uses-permission android:name=
      "com.google.android.providers.gsf.permission.READ_GSERVICES"/>

Selain langkah-langkah penyiapan dan deployment awal ini, Anda juga harus menginisialisasi fungsi library tertentu dalam kode DPC, bergantung pada kemampuan yang ingin Anda implementasikan. Detailnya disertakan dalam bagian yang relevan di bawah ini.

Membuat DPC

Build DPC Anda pada model yang ada yang digunakan untuk aplikasi administrasi perangkat. Secara khusus, aplikasi Anda harus membuat subclass DeviceAdminReceiver (class dari paket android.app.admin) seperti yang dijelaskan dalam Administrasi Perangkat.

Buat profil kerja

Untuk mengetahui contoh yang menunjukkan cara membuat profil kerja dasar, lihat BasicManagedProfile di GitHub.

Untuk membuat profil kerja di perangkat yang sudah memiliki profil pribadi, cari tahu terlebih dahulu apakah perangkat dapat mendukung profil kerja dengan memeriksa keberadaan fitur sistem FEATURE_MANAGED_USERS:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
    // This device does not support work profiles!
}

Jika perangkat mendukung profil kerja, buat profil kerja dengan mengirimkan intent menggunakan tindakan ACTION_PROVISION_MANAGED_PROFILE. (Dalam beberapa dokumentasi, profil terkelola adalah istilah umum yang berarti sama dengan profil kerja dalam konteks Android di perusahaan.) Sertakan nama paket admin perangkat sebagai tambahan:

Kotlin

val provisioningActivity = getActivity()

// You'll need the package name for the DPC app.
val myDPCPackageName = "com.example.myDPCApp"

// Set up the provisioning intent
val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java)
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString())
if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE)
    provisioningActivity.finish()
}

Java

Activity provisioningActivity = getActivity();
// You'll need the package name for the DPC app.
String myDPCPackageName = "com.example.myDPCApp";
// Set up the provisioning intent
Intent provisioningIntent =
        new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class);
provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString());
if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
         == null) {
    // No handler for intent! Can't provision this device.
    // Show an error message and cancel.
} else {
    // REQUEST_PROVISION_MANAGED_PROFILE is defined
    // to be a suitable request code
    startActivityForResult(provisioningIntent,
            REQUEST_PROVISION_MANAGED_PROFILE);
    provisioningActivity.finish();
}

Sistem merespons intent ini dengan melakukan hal berikut:

  • Memverifikasi bahwa perangkat dienkripsi. Jika tidak, sistem akan meminta pengguna untuk mengenkripsi perangkat sebelum melanjutkan.
  • Membuat profil kerja.
  • Menghapus aplikasi yang tidak diperlukan dari profil kerja.
  • Menyalin aplikasi DPC ke profil kerja dan menetapkan DPC itu sendiri sebagai pemilik profil.

Ganti onActivityResult() untuk melihat apakah penyediaan berhasil:

Kotlin

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data)
    }
}

Java

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check if this is the result of the provisioning activity
    if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
        // If provisioning was successful, the result code is
        // Activity.RESULT_OK
        if (resultCode == Activity.RESULT_OK) {
            // Work profile created and provisioned.
        } else {
            // Provisioning failed.
        }
        return;
    } else {
        // This is the result of some other activity. Call the superclass.
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Selesaikan pengaktifan profil kerja

Jika profil telah disediakan, sistem akan memanggil metode DeviceAdminReceiver.onProfileProvisioningComplete() aplikasi DPC. Ganti metode callback ini untuk menyelesaikan pengaktifan profil kerja.

Implementasi callback DeviceAdminReceiver.onProfileProvisioningComplete() umum akan melakukan hal berikut:

Aktifkan profil kerja

Setelah Anda menyelesaikan tugas ini, panggil metode setProfileEnabled() pengelola kebijakan perangkat untuk mengaktifkan profil kerja:

Kotlin

// Get the device policy manager
val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val componentName = myDeviceAdminReceiver.getComponentName(this)
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile")
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName)

Java

// Get the device policy manager
DevicePolicyManager myDevicePolicyMgr =
        (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
// Set the name for the newly created work profile.
myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile");
// ...and enable the profile
myDevicePolicyMgr.setProfileEnabled(componentName);

Menyiapkan kebijakan perangkat

Aplikasi DPC menerapkan kebijakan perangkat yang ditetapkan oleh admin untuk memenuhi persyaratan dan batasan organisasi. Misalnya, kebijakan keamanan mungkin mewajibkan agar perangkat dikunci setelah beberapa kali upaya sandi gagal. DPC membuat kueri konsol EMM untuk kebijakan saat ini, lalu menerapkan kebijakan menggunakan Device Administration API.

Untuk informasi tentang cara menerapkan kebijakan perangkat, lihat Kebijakan.

Menerapkan konfigurasi terkelola ke aplikasi kerja

Konfigurasi terkelola memungkinkan Anda memberi pelanggan kemampuan untuk melakukan pra-konfigurasi aplikasi yang telah mereka setujui untuk deployment, dan mengupdate aplikasi tersebut dengan mudah saat konfigurasi perlu berubah. Mengonfigurasi aplikasi sebelum deployment akan memastikan bahwa keamanan organisasi dan kebijakan lainnya terpenuhi setelah aplikasi diinstal pada perangkat target.

Kemampuan aplikasi ditentukan oleh developer aplikasi dalam skema XML (skema konfigurasi terkelola) yang menyertai aplikasi saat diupload ke Google Play (developer aplikasi, lihat Menyiapkan Konfigurasi Terkelola untuk mengetahui detailnya).

Anda mengambil skema ini dari aplikasi untuk ditampilkan kepada admin pelanggan di konsol EMM, menyediakan UI tempat berbagai opsi yang ditentukan dalam tampilan skema, dan memungkinkan admin melakukan pra-konfigurasi setelan aplikasi. Konfigurasi terkelola yang dihasilkan yang disetel oleh admin biasanya disimpan di server EMM yang kemudian menggunakan Play EMM API untuk menetapkan Managedconfigurationsfordevice atau Managedconfigurationsforuser. Lihat Konfigurasi Terkelola melalui Play untuk mengetahui detailnya.

Konfigurasi terkelola dapat diterapkan ke aplikasi dengan menggunakan Play EMM API (pendekatan yang direkomendasikan) atau langsung dari DPC (dijelaskan dalam Menerapkan konfigurasi terkelola langsung dari DPC). Menggunakan Play EMM API memiliki beberapa keuntungan, termasuk implementasi yang mudah karena Anda dapat menggunakan Library Dukungan DPC untuk menyederhanakan tugas DPC. Selain itu, Play EMM API:

  • Menyetel konfigurasi secara atomik saat aplikasi baru diinstal, sehingga memastikan aplikasi sudah siap saat pertama kali pengguna meluncurkan aplikasi.
  • Memungkinkan Anda mengelola konfigurasi per pengguna, sehingga Anda dapat menghindari penyediaan pemantauan per perangkat.

Menerapkan konfigurasi terkelola menggunakan Play EMM API

Agar dapat menggunakan Play EMM API untuk konfigurasi terkelola, DPC harus mengizinkan Google Play menetapkan konfigurasi. DPC Support Library menangani tugas ini untuk Anda dengan membuat proxy konfigurasi yang dikirim oleh Google Play.

Untuk menggunakan Play EMM API, download DPC Support Library lalu aktifkan dukungan konfigurasi terkelola di DPC Anda.

Mengaktifkan dukungan Konfigurasi Terkelola di DPC Anda

Impor class ini di DPC:

com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport

Lakukan inisialisasi library konfigurasi terkelola. Dalam contoh ini, "admin" adalah ComponentName dari DeviceAdminReceiver.

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Mengaktifkan konfigurasi terkelola:

Kotlin

managedConfigurationsSupport.enableManagedConfigurations()

Java

managedConfigurationsSupport.enableManagedConfigurations();

Dengan library ini yang diinisialisasi di DPC, Anda dapat menggunakan Google Play EMM API di konsol dan server EMM untuk menerapkan konfigurasi terkelola ke aplikasi yang disetujui, bukan mengkodekan tugas ini langsung di DPC. Lihat Konfigurasi Terkelola melalui Play untuk mengetahui detailnya.

Menerapkan konfigurasi terkelola langsung dari DPC

Untuk mengubah setelan konfigurasi aplikasi langsung dari DPC, panggil metode Device value.setApplicationRestrictions() dan teruskan parameter untuk DeviceAdminReceiver aplikasi DPC, nama paket aplikasi target, dan Bundle yang terdiri dari konfigurasi terkelola aplikasi sebagaimana ditetapkan oleh admin. Lihat Cara DPC dan konsol EMM berinteraksi dan Menyiapkan Konfigurasi Terkelola untuk mengetahui detailnya. Namun, perhatikan bahwa pendekatan alternatif untuk menerapkan konfigurasi terkelola ini tidak direkomendasikan dalam deployment Akun Google Play terkelola.

Dukungan penyediaan Akun Google Play terkelola

DPC Support Library mencakup dukungan untuk penyediaan Akun Google Play terkelola. Untuk menggunakan dukungan ini, Anda harus melakukan inisialisasi library terlebih dahulu, lalu Anda dapat Memastikan lingkungan kerja dan Menambahkan Akun Google Play terkelola.

Menginisialisasi dukungan Akun Google Play terkelola di DPC

Impor class ini di DPC:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Lakukan inisialisasi library kompatibilitas penyediaan. Dalam contoh ini, “admin” adalah ComponentName dari DeviceAdminReceiver.

Kotlin

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Java

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Memastikan lingkungan kerja untuk Akun Google Play terkelola

Setelah DPC menyediakan perangkat dalam mode pemilik profil (ACTION_PROVISION_MANAGED_PROFILE) atau mode pemilik perangkat (ACTION_PROVISION_MANAGED_DEVICE), pastikan perangkat tersebut dapat mendukung Akun Google Play terkelola dengan memanggil:

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Callback melaporkan keberhasilan atau kegagalan proses ini. Saat callback berhasil ditampilkan, Akun Google Play terkelola dapat ditambahkan. Jika callback melaporkan error, minta pengguna untuk memastikan perangkat memiliki koneksi jaringan (misalnya, jika download gagal). Dalam kasus lain, laporkan kegagalan tersebut ke Google.

Kotlin

object : WorkingEnvironmentCallback() {
    override fun onSuccess() {
        // Can now provision the managed Google Play Account
    }
    override fun onFailure(error: Error) {
        // Notify user, handle error (check network connection)
    }
}

Java

new WorkingEnvironmentCallback() {
    @Override
    public void onSuccess() {
        // Can now provision the managed Google Play Account
    }

    @Override
    public void onFailure(Error error) {
        // Notify user, handle error (check network connection)
    }
}

Tambahkan Akun Google Play terkelola

AccountManager framework Android dapat menambahkan Akun Google Play terkelola ke perangkat. Untuk menyederhanakan interaksi dengan AccountManager, gunakan fungsi bantuan (ditunjukkan dalam contoh di bawah) dari DPC Support Library. Fungsi ini menangani token yang ditampilkan oleh server Google Play dan memfasilitasi penyediaan Akun Google Play terkelola. Fungsi ini ditampilkan saat Akun Google Play terkelola dalam status valid:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token—Token autentikasi pengguna yang dibuat oleh panggilan Users.generateAuthenticationToken() EMM API Google Play.
  • accountAddedCallback—Menampilkan Akun Google Play terkelola yang berhasil ditambahkan ke perangkat. Callback ini harus menyertakan metode onAccountReady() dan onFailure().

Kotlin

val workAccountAddedCallback = object : WorkAccountAddedCallback() {
    override fun onAccountReady(account: Account, deviceHint: String) {
        // Device account was successfully added to the device
        // and is ready to be used.
    }

    override fun onFailure(error: Error) {
        // The account was not successfully added. Check that the token
        // provided was valid (it expires after a certain period of time).
    }
}

Java

WorkAccountAddedCallback workAccountAddedCallback =
    new WorkAccountAddedCallback() {
        @Override
        public void onAccountReady(Account account, String deviceHint) {
            // Device account was successfully added to the device
            // and is ready to be used.
        }

        @Override
        public void onFailure(Error error) {
            // The account was not successfully added. Check that the token
            // provided was valid (it expires after a certain period of time).
        }
};
  • Untuk mempelajari Device Administration API lebih lanjut, lihat Administrasi Perangkat.
  • Untuk mempelajari metode penyediaan Android Enterprise, lihat Menyediakan perangkat dalam panduan developer Android Enterprise.
  • Untuk mengetahui contoh GitHub yang menunjukkan cara membuat profil kerja dasar, lihat BasicManagedProfile.
  • Untuk mengetahui contoh GitHub yang menunjukkan cara menetapkan konfigurasi di aplikasi lain sebagai pemilik profil, lihat AppRestrictionEnforcer.