Membuat pengontrol kebijakan perangkat

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

Tentang DPC

Dalam deployment Android {i>enterprise<i}, sebuah perusahaan mempertahankan kendali atas berbagai aspek perangkat pengguna, seperti mengisolasi berbagai aspek informasi dari pengguna data pribadi, pra-konfigurasi aplikasi yang disetujui untuk lingkungan, atau menonaktifkan kemampuan perangkat (misalnya, kamera).

Sebagai EMM, Anda mengembangkan aplikasi DPC yang dapat digunakan oleh pelanggan Anda di bersama dengan konsol EMM dan server tertentu. 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 mengkonfigurasi pengaturan perangkat dan aplikasi.

DPC membuat dan mengelola profil kerja di perangkat tempat DPC diinstal. Profil kerja mengenkripsi informasi terkait pekerjaan dan memisahkannya dari pengguna data dan aplikasi pribadi. 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 kelas utilitas dan bantuan yang memfasilitasi penyediaan dan pengelolaan perangkat Android di perusahaan lingkungan fleksibel App Engine. Dengan library ini, Anda dapat memanfaatkan fitur-fitur penting dalam Aplikasi DPC:

  • Dukungan penyediaan Akun Google Play terkelola: Penyediaan terkelola Akun Google Play dari aplikasi DPC mengharuskan Google Play dan Google Aplikasi layanan Play memenuhi persyaratan versi minimum. Namun, memperbarui aplikasi bisa menjadi rumit. Pustaka dukungan DPC menangani pembaruan serta memastikan kompatibilitas dengan update mendatang untuk aplikasi Google Proses penyediaan Akun Play. Lihat Akun Google Play terkelola menyediakan dukungan penyediaan untuk detailnya.
  • Dukungan Konfigurasi Terkelola: Menggunakan Play EMM API untuk menangani konfigurasi terkelola untuk aplikasi yang disetujui adalah cara termudah untuk menerapkan konfigurasi terkelola di DPC Anda. Dukungan DPC Library memungkinkan Anda mendelegasikan tugas penerapan terkelola ke Google Play konfigurasi (sebelumnya, pembatasan aplikasi) yang ditetapkan oleh admin menggunakan EMM konsol. Menggunakan Play EMM API untuk menangani konfigurasi terkelola memungkinkan konfigurasi aplikasi yang akan diterapkan secara atomik selama instalasi. Lihat Menerapkan konfigurasi terkelola ke aplikasi kerja untuk mendapatkan informasi selengkapnya tentang cara mengaktifkan kemampuan ini dalam DPC.

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

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 saat Anda membangun aplikasi DPC. Misalnya, library memerlukan 11.4.0 Library klien autentikasi Layanan Google Play.

  1. Tambahkan library ke file build.gradle:

    Groovy

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

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. Tambahkan 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 ini memerlukan izin tertentu agar dapat dijalankan, jadi Anda harus menambahkannya ke manifes aplikasi DPC saat Anda 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 penerapan awal ini, Anda juga harus menginisialisasi fungsi pustaka tertentu di kode DPC, tergantung pada kemampuan yang ingin Anda terapkan. Detailnya akan disertakan dalam bagian di bawah ini.

Buat DPC

Bangun DPC pada model yang sudah ada dan digunakan untuk aplikasi administrasi perangkat. Secara khusus, aplikasi Anda harus membuat subclass DeviceAdminReceiver (class dari 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 cari tahu apakah perangkat itu 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 ACTION_PROVISION_MANAGED_PROFILE tindakan. (Dalam beberapa dokumentasi, profil terkelola adalah istilah umum yang memiliki arti yang 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 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 profil kerja dan menetapkan DPC itu sendiri sebagai pemilik profil.

Ganti onActivityResult() menjadi lihat 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);
    }
}

Selesai mengaktifkan profil kerja

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

DeviceAdminReceiver.onProfileProvisioningComplete() standar implementasi callback akan melakukan hal berikut:

Mengaktifkan profil kerja

Setelah Anda menyelesaikan tugas ini, panggil {i>device policy manager Metode setProfileEnabled() 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 seperti yang ditetapkan oleh admin untuk memenuhi kebutuhan dan kendala organisasi. Misalnya, kebijakan keamanan mengharuskan perangkat untuk dikunci setelah beberapa kali gagal memasukkan {i>password<i}. DPC mengkueri konsol EMM untuk kebijakan saat ini, lalu menerapkan kebijakan tersebut menggunakan Perangkat Administrasi API.

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

Terapkan konfigurasi terkelola ke aplikasi kerja

Konfigurasi terkelola memungkinkan Anda memberi pelanggan kemampuan untuk melakukan pra-konfigurasi aplikasi yang telah disetujui untuk deployment, dan memperbarui aplikasi dengan mudah ketika konfigurasi perlu diubah. Mengonfigurasi aplikasi sebelum memastikan bahwa keamanan organisasi dan kebijakan lainnya terpenuhi setelah menginstal 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, lihat Menyiapkan Konfigurasi Terkelola untuk detailnya).

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

Konfigurasi terkelola dapat diterapkan ke aplikasi menggunakan Play EMM API (pendekatan yang disarankan) atau langsung dari DPC (dijelaskan di Menerapkan konfigurasi terkelola langsung dari DPC). Menggunakan Play EMM API memiliki beberapa keuntungan, termasuk mudahnya implementasi 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 siap saat pertama kali pengguna meluncurkan aplikasi.
  • Memungkinkan Anda mengelola konfigurasi per pengguna, sehingga Anda dapat menghindari pemantauan penyediaan pada basis per perangkat.

Terapkan konfigurasi terkelola menggunakan API EMM Play

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

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

Aktifkan dukungan Konfigurasi Terkelola di DPC Anda

Impor kelas ini di DPC:

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

Melakukan inisialisasi library konfigurasi terkelola. Dalam contoh ini, "admin" bernilai 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 menginisialisasi library ini di DPC, Anda dapat menggunakan Google Play EMM API di EMM Anda konsol dan server untuk menerapkan konfigurasi terkelola ke aplikasi yang disetujui, bukan mengkodekan tugas-tugas ini langsung di DPC. Lihat Konfigurasi Terkelola melalui Play untuk mengetahui detailnya.

Terapkan konfigurasi terkelola langsung dari DPC

Untuk mengubah setelan konfigurasi aplikasi langsung dari DPC, panggil metode Metode DeviceDependencies.setApplicationRestrictions() dan lulus untuk aplikasi DPC DeviceAdminReceiver, nama paket aplikasi target, dan Bundle yang terdiri dari untuk konfigurasi aplikasi yang dikelola seperti yang ditetapkan oleh admin. Lihat Bagaimana Konsol DPC dan EMM berinteraksi dan Menyiapkan Konfigurasi Terkelola untuk mengetahui detailnya. Namun, perhatikan bahwa pendekatan alternatif ini untuk menerapkan konfigurasi tidak direkomendasikan dalam deployment Akun Google Play terkelola.

Penyediaan Akun Google Play Terkelola dukung

Library Dukungan DPC menyertakan dukungan untuk penyediaan Akun Google Play terkelola. Untuk menggunakan dukungan ini, Anda harus terlebih dahulu menginisialisasi lalu Anda dapat Memastikan lingkungan kerja dan Tambahkan Akun Google Play terkelola.

Melakukan inisialisasi Akun Google Play terkelola di DPC

Impor kelas ini di DPC:

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

Melakukan 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 perangkat mode pemilik (ACTION_PROVISION_MANAGED_DEVICE), pastikan perangkat 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 dikembalikan, Akun Google Play terkelola dapat ditambahkan. Jika callback melaporkan error, minta pengguna untuk memastikan perangkat memiliki koneksi jaringan (misalnya, jika download gagal). Di yang berbeda, laporkan kegagalan tersebut kepada 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, menggunakan fungsi bantuan (ditampilkan dalam contoh di bawah) dari Support Library DPC. {i>Function<i} menangani token yang ditampilkan oleh server Google Play dan memfasilitasi penyediaan Akun Google Play terkelola. Fungsi ini ditampilkan saat Google Play terkelola Akun dalam status valid:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token—Token autentikasi pengguna yang dibuat oleh solusi Putar panggilan Users.generateAuthenticationToken() EMM API.
  • accountAddedCallback—Mengembalikan 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 lebih lanjut Device Administration API, lihat Perangkat Administrasi.
  • Untuk mempelajari metode penyediaan Android Enterprise, lihat Menyediakan perangkat di Panduan developer Android Enterprise.
  • Untuk contoh GitHub yang menunjukkan cara membuat profil kerja dasar, lihat BasicManagedProfile.
  • Untuk contoh GitHub yang menunjukkan cara mengatur konfigurasi di aplikasi lain sebagai pemilik profil, lihat AppRestrictionEnforcer.