Yang baru untuk Android di perusahaan

Halaman ini menyediakan ringkasan tentang API perusahaan, fitur, dan perubahan perilaku yang baru, yang diperkenalkan di Android Q.

Profil kerja untuk perangkat milik perusahaan

Android Q memperkenalkan fitur penyediaan dan pengesahan baru untuk perangkat milik perusahaan yang hanya memerlukan profil kerja.

Fitur penyediaan yang lebih baik untuk profil kerja

Sekarang Anda dapat menyediakan profil kerja di Android Q dan perangkat lebih baru yang terdaftar menggunakan kode QR atau Zero touch. Selama proses penyediaan perangkat milik perusahaan, ekstra intent yang baru memungkinkan aplikasi pengontrol kebijakan perangkat (DPC) memulai profil kerja atau penyiapan yang terkelola sepenuhnya. Setelah profil kerja dibuat atau pengelolaan penuh terbentuk, DPC harus meluncurkan layar kepatuhan kebijakan untuk menerapkan kebijakan awal.

Dalam file manifes DPC Anda, nyatakan filter intent baru untuk GET_PROVISIONING_MODE dalam aktivitas dan tambahkan izin BIND_DEVICE_ADMIN untuk mencegah aplikasi memulai aktivitas tanpa kontrol. Contoh:

<activity
        android:name=".GetProvisioningModeActivity"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <intent-filter>
            <action
                android:name="android.app.action.GET_PROVISIONING_MODE" />
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    

Selama penyediaan, sistem meluncurkan aktivitas yang terkait dengan filter intent. Tujuan aktivitas ini adalah menentukan mode pengelolaan (profil kerja atau terkelola sepenuhnya).

Pengambilan ekstra penyediaan mungkin berguna sebelum menentukan mode pengelolaan yang sesuai untuk perangkat. Aktivitas tersebut dapat memanggil getIntent() untuk mengambil hal berikut:

DPC juga dapat membuat intent hasil baru dan menambahkan ekstra berikut:

Untuk menyetel mode pengelolaan di perangkat, panggil putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode), dengan desiredProvisioningMode berupa:

  • Profil kerja: PROVISIONING_MODE_MANAGED_PROFILE
  • Terkelola sepenuhnya: PROVISIONING_MODE_FULLY_MANAGED_DEVICE

Lengkapi profil kerja atau penyediaan yang terkelola sepenuhnya dengan mengirim detail penyediaan kembali ke penyiapan melalui setResult(RESULT_OK, Intent) dan tutup semua layar aktif dengan finish().

Setelah penyediaan selesai, Intent yang baru tersedia bagi DPC untuk meluncurkan layar kepatuhannya dan menerapkan setelan kebijakan awal. Di perangkat profil kerja, layar kepatuhan ditampilkan di profil kerja. DPC Anda harus memastikan bahwa layar kepatuhannya ditampilkan kepada pengguna, sekalipun pengguna melewatkan alur penyiapan ini.

Dalam file manifes DPC Anda, nyatakan filter intent baru untuk ADMIN_POLICY_COMPLIANCE dalam aktivitas dan tambahkan izin BIND_DEVICE_ADMIN untuk mencegah aplikasi memulai aktivitas tanpa kontrol. Contoh:

<activity
        android:name=".PolicyComplianceActivity"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <intent-filter>
            <action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    

DPC harus menggunakan Intent baru ini, bukan memproses siaran ACTION_PROFILE_PROVISIONING_COMPLETE.

Aktivitas yang terkait dengan filter intent dapat memanggil getIntent() untuk mengambil EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE. Setelah menjalankan kepatuhan kebijakan, ADMIN_POLICY_COMPLIANCE harus menampilkan setResult(RESULT_OK, Intent) dan menutup semua layar aktif dengan finish().

Perangkat yang terkelola sepenuhnya mengembalikan pengguna ke layar utama. Perangkat profil kerja akan meminta pengguna untuk menambahkan akun pribadi sebelum mengembalikannya ke layar utama.

Pengesahan ID perangkat profil kerja

DPC yang disetel sebagai admin profil kerja yang diberi penyediaan menggunakan pendaftaran zero-touch sekarang dapat memperoleh ID perangkat yang disahkan hardware aman, seperti IMEI atau nomor seri produsen. Perangkat harus menyertakan hardware aman (seperti trusted execution environment (TEE) atau Secure Element (SE)) dan mendukung pengesahan ID perangkat dan pendaftaran zero-touch.

Komponen admin dari profil kerja dapat memanggil DevicePolicyManager.generateKeyPair(), dengan meneruskan satu atau beberapa dari ID_TYPE_SERIAL, ID_TYPE_IMEI, atau ID_TYPE_MEID untuk argumen idAttestationFlags.

Untuk mempelajari lebih lanjut cara mengekstraksi dan memvalidasi ID perangkat, lihat Memverifikasi penyambungan kunci yang didukung hardware dengan Pengesahan Kunci.

Penyempurnaan profil kerja

API yang baru tersedia untuk mendukung visibilitas kalender lintas-profil dan pemblokiran penginstalan aplikasi dari sumber yang tidak dikenal di tingkat perangkat.

Akses ke kalender profil kerja

Aplikasi yang berjalan di profil pribadi dapat menampilkan acara dari kalender profil kerja. Untuk melakukan kueri data kalender profil kerja, panggil Calendar Provider API dengan URI penyedia konten berikut:

Jika kalender profil kerja tidak tersedia, kueri akan menampilkan null. Kalender profil kerja tidak tersedia jika admin IT memblokir akses atau jika profil kerja dinonaktifkan. Orang yang menggunakan perangkat juga dapat menonaktifkan kalender lintas-profil di Setelan.

Aplikasi yang berjalan di profil pribadi dapat menampilkan acara kerja dan mengarahkan orang yang ingin mengedit acara kerja dengan membawanya ke acara yang sama di profil kerja. Jika aplikasi Anda diinstal di profil pribadi dan juga profil kerja, panggil startViewCalendarEventInManagedProfile(). Aplikasi yang ingin mendukung acara kalender lintas profil harus menangani tindakan ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT. Persiapkan antarmuka pengguna untuk menampilkan acara yang sudah ada dengan data dari ekstra intent berikut:

Mengelola akses kalender profil kerja

Admin IT dapat memblokir profil kerja agar tidak membagikan informasi kalender ke profil pribadi. Untuk mengizinkan akses ke kalender profil kerja, komponen admin profil kerja harus memanggil setCrossProfileCalendarPackages().

Jika metode ini tidak dipanggil atau dipanggil dengan set kosong, maka tidak ada aplikasi yang dapat membaca kalender profil kerja. Untuk memberikan akses baca ke kalender profil kerja untuk semua aplikasi, teruskan null. Untuk memastikan bahwa hanya satu set aplikasi tertentu yang dapat membaca kalender profil kerja, teruskan nama paket aplikasi tersebut.

Untuk mendapatkan paket aplikasi yang disetel sebelumnya, komponen admin profil kerja dapat memanggil getCrossProfileCalendarPackages().

Profil kerja, sumber yang tidak dikenal di tingkat perangkat

Aplikasi yang didownload dari sumber selain Google Play (atau app store tepercaya lainnya) disebut aplikasi dari sumber tidak dikenal. Di Android Q, admin profil kerja sekarang dapat mencegah pengguna atau profil menginstal aplikasi dari sumber tidak dikenal di mana pun pada perangkat dengan menambahkan batasan pengguna baru DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY. Namun, setelah menambahkan batasan ini, seseorang yang menggunakan perangkat tetap dapat menginstal aplikasi menggunakan adb.

Untuk mencegah pengguna menginstal aplikasi secara keliru dari sumber tidak dikenal, sebaiknya tambahkan batasan pengguna ini karena tidak mengharuskan layanan Google Play untuk diinstal. Jika ingin mendukung versi Android lama, Anda dapat menyetel nilai konfigurasi yang dikelola untuk Google Play.

Membatasi perangkat input yang diizinkan untuk profil kerja

Jika admin profil kerja memanggil DevicePolicyManager.setPermittedInputMethods(), pengguna hanya dibatasi ke metode input yang diizinkan di dalam profil kerjanya, bukan di seluruh perangkat, sehingga memberi pengguna kontrol penuh atas metode input pada sisi pribadi perangkatnya.

Menghapus profil kerja diam-diam

Tanda WIPE_SILENTLY baru ditambahkan ke DevicePolicyManager.wipeData(). Jika tanda ini disetel, pengguna tidak akan diberi tahu setelah profil kerja mereka dihapus menggunakan wipeData().

Fitur baru untuk perangkat yang terkelola sepenuhnya

Android Q memperkenalkan fitur dan API baru untuk perangkat yang terkelola sepenuhnya, termasuk update sistem manual, memperpanjang penyediaan kode QR dan NFC agar menyertakan kredensial untuk jaringan Wi-Fi EAP, dan dukungan DNS atas TLS.

Penginstalan update sistem manual

Di Android Q, admin perangkat yang terkelola sepenuhnya dapat menginstal update sistem melalui file update sistem. Update sistem manual memungkinkan admin IT melakukan berikut ini:

  • Menguji update di sejumlah kecil perangkat sebelum menginstalnya secara luas.
  • Menghindari download duplikat di jaringan yang dibatasi bandwidth.
  • Mengatur penginstalan secara bertahap, atau mengupdate perangkat hanya saat tidak sedang digunakan.

Pertama, admin IT menyetel kebijakan update sistem yang ditunda untuk menunda penginstalan otomatis (jika perlu). Berikutnya, DPC perangkat memanggil installSystemUpdate() dengan jalur ke file update sistem produsen perangkat. Teruskan objek InstallSystemUpdateCallback yang dapat digunakan sistem untuk melaporkan error yang terjadi sebelum perangkat dimulai ulang. Jika terjadi masalah, sistem akan memanggil onInstallUpdateError() dengan kode error.

Setelah perangkat dimulai ulang, DPC harus mengonfirmasi penginstalan yang berhasil menggunakan API versi, seperti Build.FINGERPRINT. Jika update gagal, laporkan kegagalan tersebut kepada admin IT.

Penyediaan Wi-Fi EAP

Di Android Q, kode QR dan data NFC yang digunakan untuk penyediaan perangkat sekarang dapat berisi konfigurasi dan kredensial EAP—termasuk sertifikat. Saat seseorang memindai kode QR atau mengetuk tag NFC, perangkat akan otomatis mengautentikasi jaringan Wi-Fi lokal menggunakan EAP dan memulai proses penyediaan tanpa input manual tambahan.

Untuk mengautentikasi Wi-Fi menggunakan EAP, tambahkan EXTRA_PROVISIONING_WIFI_SECURITY_TYPE ekstra dengan nilai "EAP". Untuk menentukan autentikasi EAP, Anda dapat menambahkan ekstra penyediaan berikut ke intent:

Dukungan DNS Pribadi

Organisasi dapat menggunakan DNS melalui TLS (disebut DNS Pribadi di perangkat Android) untuk menghindari kebocoran kueri DNS, termasuk kueri hostname internal. Komponen admin dari perangkat yang terkelola sepenuhnya dapat mengontrol setelan DNS Pribadi perangkat. Untuk menyetel mode DNS Pribadi, hubungi:

Saat DPC memanggil salah satu metode ini, sistem akan menampilkan PRIVATE_DNS_SET_NO_ERROR jika panggilan berhasil. Jika tidak, sistem akan menampilkan error:

Untuk mengambil mode DNS Pribadi dan host yang ditetapkan pada sebuah perangkat, panggil getGlobalPrivateDnsMode() dan getGlobalPrivateDnsHost(). Anda dapat mencegah pengguna agar tidak mengubah setelan DNS pribadi dengan menambahkan batasan pengguna DISALLOW_CONFIG_PRIVATE_DNS.

Pengecualian mode kunci total VPN

Mode kunci total VPN memungkinkan DPC memblokir traffic jaringan yang tidak menggunakan VPN. Admin perangkat terkelola sepenuhnya dan profil kerja sekarang dapat mengecualikan aplikasi dari mode kunci total. Aplikasi yang dikecualikan menggunakan VPN secara default, namun otomatis terhubung ke jaringan lain jika VPN tidak tersedia. Aplikasi yang dikecualikan, yang secara eksplisit juga dicegah mengakses VPN hanya akan menggunakan jaringan lain.

Untuk mengecualikan aplikasi dari mode kunci total, panggil metode DevicePolicyManager baru setAlwaysOnVpnPackage() yang sekarang menerima daftar paket aplikasi yang dikecualikan. Paket aplikasi yang ditambahkan oleh DPC harus diinstal di perangkat jika metode tersebut dipanggil. Jika aplikasi di-uninstal dan diinstal ulang, aplikasi harus dikecualikan lagi. Untuk mendapatkan aplikasi yang sebelumnya dikecualikan dari mode kunci total, panggil getAlwaysOnVpnLockdownWhitelist().

Untuk membantu admin perangkat terkelola sepenuhnya dan profil kerja mendapatkan status mode kunci total, Android Q menambahkan metode isAlwaysOnVpnLockdownEnabled().

Cakupan delegasi baru

Android Q memperluas daftar fungsi yang dapat didelegasikan oleh DPC ke aplikasi lain yang lebih terspesialisasi. Android mengelompokkan metode API yang diperlukan untuk tugas ke dalam cakupan. Untuk mendelegasikan cakupan, panggil setDelegatedScopes() dan teruskan satu atau beberapa cakupan berikut:

Android Q memperkenalkan class DelegatedAdminReceiver baru untuk aplikasi yang didelegasikan. Sistem menggunakan penerima siaran ini untuk mengirimkan callback yang menyerupai DPC ke aplikasi yang didelegasikan. Aplikasi yang telah didelegasikan pencatatan log aktivitas jaringan dan pemilihan sertifikat harus mengimplementasikan class ini. Untuk menambahkan komponen ini ke aplikasi yang didelegasikan, ikuti langkah-langkah ini:

  1. Tambahkan subclass DelegatedAdminReceiver ke aplikasi yang didelegasikan.
  2. Nyatakan <receiver> dalam manifes aplikasi, dengan menambahkan tindakan filter-intent untuk setiap callback. Misalnya, ACTION_NETWORK_LOGS_AVAILABLE atau ACTION_CHOOSE_PRIVATE_KEY_ALIAS.
  3. Lindungi penerima siaran dengan izin BIND_DEVICE_ADMIN.

Cuplikan berikut menampilkan manifes aplikasi dari satu aplikasi yang didelegasikan yang menangani pencatatan log jaringan dan pemilihan sertifikat.

<receiver android:name=".app.DelegatedAdminReceiver"
            android:permission="android.permission.BIND_DELEGATED_ADMIN">
        <intent-filter>
            <action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
            <action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
        </intent-filter>
        </receiver>
    

Pencatatan log aktivitas jaringan

Untuk membantu organisasi mendeteksi dan melacak malware, DPC dapat mencatat log koneksi TCP dan pencarian DNS oleh sistem. Di Android Q, admin perangkat yang terkelola sepenuhnya dapat mendelegasikan pencatatan log jaringan ke aplikasi yang dikhususkan.

Untuk mengambil log jaringan setelah sistem menyediakan batch, aplikasi yang didelegasikan harus terlebih dahulu membuat subclass DelegatedAdminReceiver (dijelaskan sebelumnya). Di subclass Anda, implementasikan callback onNetworkLogsAvailable() dengan mengikuti panduan di Mengambil log.

Aplikasi yang didelegasikan dapat memanggil metode DevicePolicyManger berikut (dengan meneruskan null untuk argumen admin):

Untuk menghindari hilangnya log, DPC sebaiknya tidak mengaktifkan pencatatan log jaringan jika berencana mendelegasikan ke aplikasi lain. Aplikasi yang didelegasikan harus mengaktifkan dan mengumpulkan log jaringan. Setelah mendelegasikan pencatatan log jaringan, DPC tidak akan menerima onNetworkLogsAvailable() lebih lanjut.

Untuk mempelajari cara melaporkan pencatatan log aktivitas jaringan dari aplikasi yang didelegasikan, baca panduan developer Pencatatan log aktivitas jaringan.

Pemilihan sertifikat

Di Android Q, admin perangkat yang terkelola sepenuhnya, profil kerja, dan pengguna sekunder dapat mendelegasikan pemilihan sertifikat ke aplikasi yang dikhususkan.

Untuk memilih alias sertifikat, aplikasi yang didelegasikan harus terlebih dahulu membuat subclass DelegatedAdminReceiver (dijelaskan sebelumnya). Di subclass Anda, implementasikan callback onChoosePrivateKeyAlias() dan tampilkan alias untuk sertifikat pilihan atau, untuk meminta pengguna memilih sertifikat, tampilkan null.

Penghentian kebijakan admin perangkat

Android Q mencegah aplikasi dan DPC menerapkan kebijakan admin perangkat lama. Sebaiknya pelanggan dan partner bertransisi ke perangkat yang terkelola sepnuhnya atau profil kerja. Kebijakan berikut akan menampilkan SecurityException saat dijalankan oleh admin perangkat yang menargetkan Android Q:

Beberapa aplikasi menggunakan admin perangkat untuk administrasi perangkat konsumen. Misalnya, mengunci dan me-wipe perangkat yang hilang. Untuk mengaktifkannya, kebijakan berikut tetap tersedia:

Untuk informasi selengkapnya tentang perubahan ini, baca Penghentian admin perangkat.

Fitur baru untuk aplikasi

Aplikasi yang menargetkan Android Q dapat melakukan kueri kompleksitas kunci layar yang disetel di perangkat sebelum menampilkan data rahasia atau meluncurkan fitur kritis. Aplikasi yang memanggil KeyChain API mendapatkan manfaat dari penyempurnaan perilaku, sementara fitur baru juga tersedia untuk aplikasi VPN.

Pemeriksaan kualitas kunci layar

Mulai di Android Q, aplikasi dengan fitur kritis yang memerlukan kunci layar dapat melakukan kueri kompleksitas kunci layar perangkat atau profil kerja. Aplikasi yang memerlukan kunci layar yang lebih kuat dapat mengarahkan pengguna ke setelan kunci layar sistem, sehingga pengguna dapat memperbarui setelan keamanan.

Untuk memeriksa kualitas kunci layar:

Untuk meluncurkan setelan kunci layar sistem, gunakan ACTION_SET_NEW_PASSWORD dengan EXTRA_PASSWORD_COMPLEXITY tambahan—opsi yang tidak memenuhi kompleksitas yang ditentukan di ekstra intent akan diberi warna abu-abu. Pengguna dapat memilih dari opsi kunci layar yang tersedia atau keluar dari layar.

Praktik terbaik: Tampilkan pesan di aplikasi Anda sebelum meluncurkan halaman kunci layar sistem. Jika aplikasi Anda dilanjutkan, panggil DevicePolicyManager.getPasswordComplexity() kembali. Jika diperlukan kunci layar yang lebih kuat, batasi akses, jangan meminta pengguna berkali-kali memperbarui setelan keamanan.

Dukungan proxy HTTP di aplikasi VPN

Di Android Q, aplikasi VPN dapat menyetel proxy HTTP untuk koneksi VPN. Untuk menambahkan proxy HTTP, aplikasi VPN harus mengonfigurasi instance ProxyInfo dengan host dan port, sebelum memanggil VpnService.Builder.setHttpProxy(). Sistem dan banyak library jaringan menggunakan setelan proxy ini, namun sistem tidak memaksa aplikasi untuk melakukan proxy permintaan HTTP.

Untuk mengetahui contoh kode yang menampilkan cara menyetel proxy HTTP, lihat contoh aplikasi ToyVPN .

Mode layanan VPN

Aplikasi VPN sekarang dapat mengetahui apakah layanan sedang berjalan karena adanya VPN always-on dan apakah mode kunci total aktif. Metode baru yang ditambahkan di Android Q dapat membantu Anda menyesuaikan antarmuka pengguna. Misalnya, Anda dapat menonaktifkan tombol Putuskan jika VPN always-on mengontrol siklus proses layanan.

Aplikasi VPN dapat memanggil metode VpnService berikut setelah terhubung ke layanan dan menentukan antarmuka lokal:

  • isAlwaysOn() untuk mencari tahu apakah sistem memulai layanan karena adanya VPN always-on
  • isLockdownEnabled() untuk mencari tahu apakah sistem memblokir koneksi yang tidak menggunakan VPN

Status always-on tetap sama saat layanan sedang berjalan, namun status mode kunci total mungkin berubah.

Penyempurnaan keychain

Android Q memperkenalkan beberapa penyempurnaan terkait KeyChain API.

Saat suatu aplikasi memanggil KeyChain.choosePrivateKeyAlias(), perangkat kini memfilter daftar sertifikat yang dapat dipilih pengguna berdasarkan penerbit dan algoritme kunci yang ditentukan dalam panggilan tersebut.

Misalnya, saat server TLS mengirim pesan Permintaan Sertifikat sebagai bagian dari handshake TLS dan browser memanggil KeyChain.choosePrivateKeyAlias(), prompt pemilihan sertifikat sekarang hanya menyertakan opsi yang cocok dengan parameter penerbit. Jika tidak ada opsi yang cocok atau tidak ada sertifikat yang diinstal pada perangkat, maka prompt pemilihan tidak akan ditampilkan kepada pengguna.

Selain itu, KeyChain tidak lagi mengharuskan perangkat memiliki kunci layar sebelum kunci atau sertifikat CA dapat diimpor.

Pelajari lebih lanjut

Untuk mempelajari perubahan lain yang mungkin memengaruhi aplikasi Anda, baca halaman perubahan perilaku Android Q (untuk aplikasi yang menargetkan Q dan semua aplikasi).