Menerapkan akun pengguna

Ada dua jenis identitas pengguna utama untuk pendaftaran Android Enterprise: Akun Google Play terkelola dan Akun Google Terkelola. Akun Google Play terkelola berpusat pada perangkat, yang berarti akun tersebut tidak terikat dengan identitas Google pengguna tertentu. Sebaliknya, Akun Google Terkelola ditautkan ke identitas Google perusahaan pengguna, yang meningkatkan pengalaman pengguna dengan membuat mereka tetap login di perangkat mereka.

Akun Google Play terkelola dulunya adalah standar. Namun, Google kini mendorong semua pengembangan baru untuk menggunakan alur pendaftaran yang ditingkatkan, yang secara default membuat Akun Google Terkelola.

Meskipun panduan untuk penerapan yang lebih lama disediakan di akhir dokumen ini untuk konteks, semua pengembangan baru harus mengikuti alur pendaftaran baru yang dijelaskan di sini.

Ringkasan

Alur pendaftaran perangkat yang ditingkatkan menyederhanakan penyiapan perangkat dengan memanfaatkan beberapa komponen baru dan mengubah cara Pengontrol Kebijakan Perangkat (DPC) kustom diterapkan. Pendekatan baru ini mengharuskan solusi DPC kustom untuk berintegrasi dengan Android Management API (AMAPI) SDK dan Android Device Policy untuk menjalankan fungsi penyiapan perangkat dan pendaftaran pengguna.

AMAPI SDK menyediakan API yang diperlukan untuk berinteraksi dengan Android Device Policy di perangkat itu sendiri. Di sisi server, solusi Enterprise Mobility Management (EMM) akan menggunakan Play EMM API untuk membuat token pendaftaran yang diperlukan untuk memulai proses pendaftaran perangkat.

Aplikasi Android Device Policy kini memiliki peran sentral dalam menangani operasi sisi perangkat. AMAPI SDK digunakan untuk mengelola penginstalan dan update yang diperlukan di perangkat. Android Device Policy juga mengambil alih alur autentikasi pengguna, menangani autentikasi pengguna secara langsung, dan memberikan identitas pengguna ke EMM. Jika Google tidak dapat mengautentikasi pengguna karena alasan apa pun, akun Google Play terkelola baru akan dibuat dan ditambahkan ke perangkat sebagai pengganti.

Bagian penting dari alur pendaftaran baru ini adalah mengelola akses perangkat ke layanan Google. Secara default, perangkat dimulai dalam status terbatas, dan EMM memainkan peran penting dalam mengaktifkan akses setelah perangkat mematuhi kebijakan.

Integrasi API

Sebelum memulai, pastikan Anda menggunakan klien Play EMM API dan AMAPI SDK versi terbaru.

Panduan penerapan pendaftaran

Panduan ini memberikan langkah-langkah yang diperlukan untuk menerapkan pendaftaran. Panduan ini mencakup penyiapan lingkungan, penanganan berbagai metode pendaftaran, dan pengelolaan siklus proses perangkat.

Menyiapkan lingkungan

Sebelum memulai penyiapan akun, Anda harus menyiapkan lingkungan perangkat. Persiapan ini mengharuskan Anda mengupdate Google Play Store ke iterasi terbarunya dan menginstal Android Device Policy (com.google.android.apps.work.clouddpc) secara diam-diam ke perangkat. Penginstalan Android Device Policy sangat penting karena berisi komponen penting dari proses Penyiapan Akun. EMM tidak perlu melakukan penyiapan lingkungan secara manual. Sebagai gantinya, EMM harus menggunakan EnvironmentClient, seperti yang didokumentasikan di dan mematuhi contoh kode yang disediakan.

Kode contoh

Sebelum dapat menggunakan AccountSetup API untuk menambahkan akun kerja di perangkat, DPC harus terlebih dahulu memverifikasi bahwa lingkungan perangkat sudah siap.

  • Gunakan EnvironmentClientFactory untuk membuat instance EnvironmentClient dan memanggil prepareEnvironment atau prepareEnvironmentAsync

    val notificationReceiverServiceName = ComponentName(context,
    NotificationReceiver::class.java)
    
    // An EMM should implement android.app.admin.DeviceAdminReceiver and use that
    // class to instantiate a ComponentName
    
    val admin = ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java)
    
    EnvironmentClientFactory.create(context)
        .prepareEnvironment(
            PrepareEnvironmentRequest.builder()
                .setRoles(
                    listOf(
                        Role.builder().setRoleType(
                            Role.RoleType.DEVICE_POLICY_CONTROLLER
                        ).build()
                    )
                )
        .setAdmin(admin)
                .build(),
              notificationReceiverServiceName,
            )
    
    [Proceed with AccountSetup]
    
    

Operasi ini dapat memerlukan waktu beberapa detik atau menit, karena aplikasi dapat diinstal atau diupdate untuk memverifikasi lingkungan kerja yang tepat. Google merekomendasikan untuk memulai proses ini sesegera mungkin di latar belakang dan menampilkan UI yang sesuai saat pengguna menunggu. Setelah operasi selesai, perangkat siap digunakan oleh DPC untuk menggunakan AccountSetup API.

Alur pendaftaran

EMM harus menghentikan penggunaan users.generateAuthenticationToken() dan users.insert() untuk semua perangkat. Sebagai gantinya, EMM harus memanggil API di perangkat untuk melakukan autentikasi pengguna akhir. API baru akan menampilkan userId dan email ke DPC. Jika Google tidak dapat mengautentikasi pengguna, Akun Google Play Terkelola akan dibuat dan ditambahkan ke perangkat. Dalam hal ini, Google akan menampilkan userId akun tersebut.

Google kini memperkenalkan penggunaan token pendaftaran, yang harus diteruskan ke API autentikasi. EMM menentukan kapan dan cara membuat token, dan token tersebut dapat menjadi bagian dari payload pendaftaran yang ada (misalnya, kode QR atau konfigurasi Zero-touch).

Pengecualian untuk token pendaftaran yang ada

Beberapa pelanggan menggunakan token pendaftaran dengan tanggal habis masa berlaku yang lama untuk melakukan pendaftaran berulang. Untuk memastikan alur kerja yang ada ini tidak terganggu, token yang dibuat SEBELUM persyaratan "Autentikasi menggunakan Google" diaktifkan untuk pertama kalinya dikecualikan dari perintah login baru. Token lama ini akan terus berfungsi seperti sebelumnya, sehingga pengguna dapat mendaftarkan perangkat tanpa menjalani proses autentikasi Google. Namun, token yang dibuat SETELAH persyaratan autentikasi Google diaktifkan untuk pertama kalinya akan mengikuti aturan autentikasi baru. Artinya, perangkat yang menggunakan token yang lebih baru ini akan mengharuskan pengguna untuk melakukan autentikasi sesuai dengan setelan yang dipilih oleh admin IT.

Google merekomendasikan untuk membuat token sesuai permintaan dan mengganti API yang ada untuk Akun Google Play Terkelola dengan API baru untuk meminimalkan perubahan.

Integrasi DPC umum dengan API sebelumnya
Gambar 1. Integrasi DPC umum dengan API sebelumnya
Contoh integrasi DPC dengan API baru untuk perangkat tanpa pengguna
Gambar 2. Contoh integrasi DPC dengan API baru untuk perangkat tanpa pengguna
Contoh integrasi DPC dengan API baru untuk perangkat pengguna
Gambar 3. Contoh integrasi DPC dengan API baru untuk perangkat pengguna

Alur pendaftaran DPC kustom yang ditingkatkan melibatkan langkah-langkah berikut:

Status Perangkat Awal yang Penting: Saat mendaftarkan perangkat dengan DPC kustom, Akun Google yang ditambahkan ke perangkat akan dimulai dalam status dinonaktifkan. Artinya, akses ke layanan Google, termasuk Google Play, awalnya dibatasi.

Status "dinonaktifkan" default ini dan persyaratan berikutnya agar EMM menandai perangkat sebagai mematuhi kebijakan (misalnya, dengan memanggil Devices.SetState) secara khusus berlaku dalam kondisi berikut:

  1. Organisasi telah memverifikasi kepemilikan domainnya dengan Google.
  2. Admin IT telah secara eksplisit mengaktifkan pengelolaan seluler Android pihak ketiga untuk Unit Organisasi (OU) tertentu pengguna dalam konsol Google Admin.
  1. Membuat Token Pendaftaran: EMM membuat token pendaftaran menggunakan Play EMM API.
  2. Menyiapkan Lingkungan: DPC kustom menggunakan alur Siapkan Lingkungan untuk memverifikasi bahwa perangkat siap untuk pendaftaran.
  3. Memulai Pendaftaran: DPC kustom memanggil startAccountSetup API di AMAPI SDK, meneruskan token pendaftaran. Catatan: DPC harus berupa pemilik perangkat atau pemilik profil sebelum memanggil API ini.
  4. Meluncurkan aktivitas autentikasi Google: Jika diperlukan, DPC kustom memanggil launchAuthenticationActivity API di AMAPI SDK, meneruskan AccountSetupAttempt. Tindakan ini akan memulai aktivitas autentikasi Google, mengembalikan pengguna ke DPC kustom setelah autentikasi berhasil. Pengguna juga dapat melewati proses ini. Dalam hal ini, akun Google Play Terkelola akan ditambahkan ke perangkat. Opsi ini dapat dikonfigurasi menggunakan googleAuthenticationOptions.
  5. Menyelesaikan Pendaftaran: AMAPI SDK memberi tahu DPC kustom tentang hasil pendaftaran.
  6. Mengaktifkan layanan Google: Setelah DPC kustom sepenuhnya menyediakan perangkat dan mengonfirmasi bahwa perangkat tersebut mematuhi semua kebijakan perusahaan, server EMM harus memanggil Devices.setState() dengan parameter accountState yang ditetapkan ke "enabled".
  • Mengapa hal ini penting: Panggilan API ini menandai perangkat sebagai mematuhi kebijakan.
  • Konsekuensi jika tidak memanggil: Tanpa panggilan Devices.setState(setStateRequest) ini, akun akan tetap dalam status "dinonaktifkan". Pengguna tidak akan dapat mengakses Google Play (untuk menginstal atau mengupdate aplikasi) dan layanan Google lainnya yang memerlukan autentikasi akun.

Mengelola Status Perangkat dan Akses Layanan

Setelah pendaftaran awal, EMM bertanggung jawab untuk mempertahankan akses perangkat ke layanan Google berdasarkan status kepatuhannya.

Menangani Gangguan Layanan: BAD_DEVICE_MANAGEMENT

Jika akses perangkat ke layanan Google diblokir, layanan Google Play (GMSCore) akan menyiarkan Intent dengan tindakan: com.google.android.gms.auth.BAD_DEVICE_MANAGEMENT. Hal ini dapat terjadi karena beberapa alasan:

  • EMM tidak pernah memanggil Devices.setState("enabled") setelah pendaftaran perangkat awal.
  • Perangkat tidak lagi mematuhi kebijakan EMM, dan EMM belum mengaktifkannya kembali.
  • EMM secara eksplisit menetapkan status perangkat ke "dinonaktifkan" dengan memanggil Devices.setState() dengan accountState yang ditetapkan ke "dinonaktifkan". Hal ini mungkin disebabkan oleh masalah keamanan, tindakan administratif, atau alasan lainnya.

Intent ini menyertakan kode status, seperti "ThirdPartyDeviceManagementRequired".

DPC Kustom HARUS menerapkan BroadcastReceiver untuk memproses Intent BAD_DEVICE_MANAGEMENT ini.

Setelah menerima siaran ini, DPC harus:

  1. Menilai Ulang Kepatuhan: Periksa apakah perangkat memenuhi semua kebijakan yang ditetapkan oleh EMM.
  2. Mengambil Tindakan:
    • Jika Mematuhi Kebijakan: DPC harus memberi tahu server EMM. Server EMM kemudian harus memanggil Devices.setState() dengan accountState yang ditetapkan ke "enabled" untuk ID pengguna dan ID perangkat tertentu guna mencoba memulihkan akses layanan.
    • Jika Tidak Mematuhi Kebijakan: Setelah masalah diselesaikan, dan perangkat mematuhi kebijakan, EMM harus memanggil Devices.setState().

Mekanisme ini memastikan bahwa ada cara untuk mendeteksi dan memulihkan situasi saat perangkat kehilangan akses ke layanan Google.

Pertimbangan Pengambilalihan Perusahaan

Perubahan jenis akun organisasi (misalnya, dari ManagedGoogleDomainType.TYPE_TEAM ke ManagedGoogleDomainType.TYPE_DOMAIN) dapat terjadi. Meskipun proses ini biasanya tidak merusak binding EMM, terkadang proses ini dapat mengganggu akses layanan Google di perangkat.

EMM harus mengetahui bahwa jika pengguna melaporkan masalah akses layanan setelah peristiwa pengambilalihan yang diketahui, meskipun perangkat tampak mematuhi kebijakan EMM, panggilan ke Devices.setState() mungkin diperlukan untuk menyinkronkan kembali status perangkat dengan backend Google di bawah struktur pelanggan baru. Panggilan proaktif untuk semua perangkat setelah pengambilalihan umumnya tidak diperlukan, tetapi panggilan ini adalah alat utama untuk menyelesaikan masalah akses.

Penyiapan Akun - kode contoh

  1. Untuk memulai upaya penyiapan akun, aplikasi panggilan dapat menggunakan AccountSetupClient dan memanggil metode startAccountSetup() atau startAccountSetupFuture(). Untuk contoh penerapan, lihat contoh kode berikut:

    // Create AccountSetupClient
    val client = AccountSetupClientFactory.create(
        this,
        activityResultRegistry
    )
    lifecycle.addObserver(client.lifecycleObserver)
    
    // Create adminComponent
    val notificationReceiver = ComponentName(this, AccountSetupNotificationReceiver::class.java)
    // Helper method to get enrollment token created with Play EMM API
    val enrollmentToken = getEnrollmentToken()
    val request =
        StartAccountSetupRequest.builder()
            .setEnrollmentToken(enteredText)
            .setNotificationReceiverServiceComponentName(notificationReceiver)
            .setAdminComponentName(
                ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java))
            .build()
    try {
        val accountSetupAttempt = client.startAccountSetup(request)
        // handle attempt
    } catch (e: Exception) {
        // handle exception
    }
    
  2. Terapkan AccountSetupListener antarmuka dan berikan penerapan untuk cara menangani update status yang diterima.

  3. Perluas NotificationReceiverService dan berikan instance AccountSetupListener yang dibuat pada langkah 2 dengan mengganti getAccountSetupListener().

    // Handles account setup changes
    class AccountSetupNotificationReceiver :
          NotificationReceiverService(),
          AccountSetupListener {
    
        override fun getAccountSetupListener(): AccountSetupListener = this
    
        override fun onAccountSetupChanged(accountSetupAttempt:
      AccountSetupAttempt) {
    
            when (accountSetupAttempt.state.kind) {
                StateCase.ADDED_ACCOUNT -> {
                    val enterpriseAccount = state.addedAccount()
                    val userId = enterpriseAccount.userId
                    val deviceId = enterpriseAccount.deviceId
                    // Handle account added state.
    
                    // IMPORTANT: The device/account is now added but *DISABLED*
                    // for Google services. Your EMM backend MUST be notified to
                    // perform policy compliance checks and then call Devices.setState()
                    // to activate Google Play and other services.
    
                }
                StateCase.AUTHENTICATION_ACTIVITY_LAUNCH_REQUIRED -> {
                    val request = LaunchAuthenticationActivityRequest.builder()
                .setAccountSetupAttempt(accountSetupAttempt)
                .build();
                    // Send the attempt to the foreground activity to call:
                    accountSetupClient.launchAuthenticationActivity(request)
                }
                StateCase.ACCOUNT_SETUP_ERROR -> {
                    // Handle error state.
                    val failureReason = state.accountSetupError().failureReason
                }
                else -> {
                    // Handle unknown account setup attempt state.
                }
            }
        }
    }
    
    
  4. Tambahkan class yang diperluas NotificationReceiverService ke AndroidManifest.xml dan pastikan class tersebut diekspor.

      <application>
        <service
            android:name = ".accountsetup.AccountSetupNotificationReceiver"
            android:exported = "true" />
      </application>
    

    Jika aplikasi Anda menargetkan SDK 30 atau yang lebih baru, elemen kueri diperlukan di AndroidManifest.xml untuk menentukan bahwa aplikasi tersebut akan berinteraksi dengan ADP.

      <queries>
        <package android:name="com.google.android.apps.work.clouddpc" />
      </queries>
    

Panduan pengujian

Bagian ini memberikan serangkaian panduan dan praktik terbaik untuk menguji penerapan Anda.

Menguji PrepareEnvironment

  1. Mendapatkan Status Perangkat Saat Ini: EMM menjalankan

    adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionName
    

    untuk mendapatkan versi Android Device Policy yang ada di perangkat. Jika Android Device Policy tidak diinstal, output kosong akan ditampilkan.

  2. Mengintegrasikan PrepareEnvironment: DPC kustom memanggil prepareEnvironment API di AMAPI SDK, meneruskan permintaan yang benar.

  3. Menunggu hasil PrepareEnvironment: DPC kustom menunggu prepareEnvironment selesai.

  4. Mengonfirmasi keberhasilan PrepareEnvironment: Setelah selesai, EMM dijalankan lagi

    adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionName
    

    Kali ini, versi Android Device Policy harus lebih tinggi daripada di langkah 1.

Menguji autentikasi Akun Google

  1. Membuat perusahaan pengujian: EMM membuat perusahaan Google domain pengujian yang ditautkan ke EMM pengujian, dengan enterprises.generateSignupUrl.
  2. Mengaktifkan autentikasi Google: EMM mengaktifkan autentikasi Google untuk perusahaan pengujian dengan mengikuti petunjuk ini di konsol Google Admin.
  3. Membuat Token Pendaftaran: EMM membuat token pendaftaran menggunakan Play EMM API dengan jenis userDevice.
  4. Memulai Pendaftaran: DPC kustom memanggil startAccountSetup API di AMAPI SDK, meneruskan token pendaftaran.
  5. Meluncurkan aktivitas yang diperlukan: AMAPI SDK memberi tahu DPC kustom bahwa aktivitas harus diluncurkan untuk mengautentikasi pengguna.
  6. Mengautentikasi pengguna: DPC kustom memanggil launchAuthenticationActivity untuk memulai aktivitas. Pengguna melakukan autentikasi dengan Akun Google Terkelola (bagian dari perusahaan yang dibuat pada langkah 1).
  7. Menyelesaikan Pendaftaran: AMAPI SDK memberi tahu DPC kustom tentang hasil pendaftaran.

Menguji autentikasi Google yang dilewati

Kita akan menggunakan penyiapan yang dijelaskan sebelumnya.

Kali ini, pada langkah 7, pengguna menekan Lewati , bukan melakukan autentikasi dengan Akun Google-nya. Pendaftaran berhasil diselesaikan, dengan akun layanan di perangkat (yaitu AuthenticationType adalah Anonim).

Menguji perangkat tanpa pengguna

Alur pendaftaran DPC kustom yang ditingkatkan menggunakan langkah-langkah berikut, saat autentikasi Google dinonaktifkan:

  1. Membuat perusahaan pengujian: Perusahaan ini dapat berupa perusahaan yang sama seperti yang dibuat sebelumnya.
  2. Membuat Token Pendaftaran: EMM membuat token pendaftaran menggunakan Play EMM API dengan jenis userlessDevice.
  3. Memulai Pendaftaran: DPC kustom memanggil startAccountSetup API di AMAPI SDK, meneruskan token pendaftaran.
  4. Menyelesaikan Pendaftaran: AMAPI SDK memberi tahu DPC kustom tentang hasil pendaftaran.