Membuat pengontrol kebijakan perangkat

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

Tentang DPC

Dalam deployment Android Enterprise, perusahaan mempertahankan kontrol atas berbagai aspek perangkat pengguna, seperti mengisolasi informasi terkait pekerjaan dari data pribadi pengguna, mengonfigurasi terlebih dahulu 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 aplikasi dan setelan perangkat.

DPC membuat dan mengelola profil kerja di perangkat tempat DPC 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 mewajibkan 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. Dengan Library Dukungan DPC, 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 informasi selengkapnya tentang cara mengaktifkan kemampuan ini di DPC Anda.

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

Mendownload Support Library DPC

Untuk menggunakan DPC Support Library, download library dari komunitas Penyedia EMM Android Enterprise. Anda harus menambahkan library ke file build.gradle dan menangani dependensi lain 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. Menambahkan 11.4.0 library klien autentikasi Layanan Google Play 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 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 penyiapan dan deployment awal ini, Anda juga harus menginisialisasi fungsi library tertentu dalam kode DPC, bergantung pada kemampuan yang ingin Anda implementasikan. Detailnya disertakan di bagian relevan di bawah ini.

Membuat DPC

Bangun 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 contoh yang menunjukkan cara membuat profil kerja dasar, lihat BasicManagedProfile di GitHub.

Untuk membuat profil kerja di perangkat yang sudah memiliki profil pribadi, pertama-tama cari tahu 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 dengan tindakan ACTION_PROVISION_MANAGED_PROFILE. (Dalam beberapa dokumentasi, profil terkelola adalah istilah umum yang berarti sama dengan profil kerja dalam konteks Android dalam 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 akan 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 dalam 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() biasa akan melakukan hal berikut:

Aktifkan profil kerja

Setelah 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 disetel oleh admin untuk memenuhi persyaratan dan batasan organisasi. Misalnya, kebijakan keamanan mungkin mengharuskan perangkat dikunci setelah sejumlah upaya sandi gagal tertentu. DPC membuat kueri konsol EMM untuk kebijakan saat ini, lalu menerapkan kebijakan menggunakan Device Administration API.

Untuk mengetahui informasi tentang cara menerapkan kebijakan perangkat, lihat Kebijakan.

Menerapkan konfigurasi terkelola ke aplikasi kerja

Konfigurasi terkelola memungkinkan Anda memberi pelanggan kemampuan untuk mengonfigurasi terlebih dahulu aplikasi yang telah mereka setujui untuk deployment, dan mengupdate aplikasi tersebut dengan mudah saat konfigurasi perlu berubah. Mengonfigurasi aplikasi sebelum deployment memastikan bahwa keamanan organisasi dan kebijakan lainnya terpenuhi setelah penginstalan aplikasi 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, baca artikel Menyiapkan Konfigurasi Terkelola untuk 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 mengonfigurasi sebelumnya setelan aplikasi. Konfigurasi terkelola yang dihasilkan 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 menggunakan Play EMM API (pendekatan yang direkomendasikan) atau langsung dari DPC (dijelaskan dalam Menerapkan konfigurasi terkelola langsung dari DPC). Penggunaan Play EMM API memiliki beberapa keuntungan, termasuk implementasi yang mudah karena Anda dapat menggunakan DPC Support Library 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 pemantauan penyediaan di basis per perangkat.

Menerapkan konfigurasi terkelola menggunakan Play EMM API

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

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

Aktifkan 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 DeviceAdminReceiver.

Kotlin

var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)

Java

ManagedConfigurationsSupport managedConfigurationsSupport =
    new ManagedConfigurationsSupport(context, admin);

Aktifkan 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 deploy.setApplicationRestrictions() dan teruskan parameter untuk DeviceAdminReceiver aplikasi DPC, nama paket aplikasi target, dan Bundle yang terdiri dari konfigurasi terkelola aplikasi seperti yang disetel 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 menginisialisasi library terlebih dahulu, lalu Anda dapat Memastikan lingkungan kerja dan Menambahkan Akun Google Play terkelola.

Lakukan inisialisasi 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 akan 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)
    }
}

Menambahkan Akun Google Play terkelola

AccountManager framework Android dapat menambahkan Akun Google Play terkelola ke perangkat. Untuk menyederhanakan interaksi dengan AccountManager, gunakan fungsi bantuan (ditampilkan 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 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 Device Administration.
  • Untuk mempelajari metode penyediaan Android Enterprise, lihat Menyediakan perangkat dalam panduan developer Android Enterprise.
  • Untuk contoh GitHub yang menunjukkan cara membuat profil kerja dasar, lihat BasicManagedProfile.
  • Untuk contoh GitHub yang menunjukkan cara menetapkan konfigurasi di aplikasi lain sebagai pemilik profil, lihat AppRestrictionEnforcer.