Fitur peran aplikasi memungkinkan admin IT memberikan hak istimewa khusus ke aplikasi terkelola di perangkat yang didukung Android. Dengan menetapkan peran tertentu, aplikasi dapat dikecualikan dari pembatasan daya dan latar belakang, penangguhan, hibernasi (di Android 14+) dan kontrol pengguna (yaitu mencakup tindakan pengguna seperti menghentikan paksa dan menghapus data aplikasi) dinonaktifkan (di Android 11+), sehingga memungkinkan aplikasi menjalankan fungsi pentingnya tanpa gangguan. Selain itu, aplikasi dapat diberi tahu tentang peran yang ditetapkan, sehingga dapat melakukan bootstrapping sendiri tanpa campur tangan pengguna.
Untuk mengetahui daftar peran aplikasi yang tersedia dan hak istimewa khusus yang diberikan kepada
setiap peran, lihat RoleType.
Prasyarat
Perangkat dikelola oleh EMM berbasis AMAPI (EMM yang menggunakan DPC kustom tidak didukung).
Menyiapkan aplikasi untuk menggunakan fitur
Integrasi dengan AMAPI SDK hanya diperlukan jika aplikasi ingin diberi tahu tentang peran yang ditetapkan yang memungkinkannya melakukan booting sendiri (yaitu, peluncuran otomatis tanpa interaksi pengguna).
Mengintegrasikan dengan AMAPI SDK di aplikasi Anda
Anda dapat menemukan informasi selengkapnya tentang AMAPI SDK dan cara menambahkannya ke aplikasi Anda di panduan integrasi AMAPI SDK.
Menambahkan metadata yang diperlukan ke manifes aplikasi
Android Device Policy (ADP) perlu mengetahui ComponentName kelas Anda yang menerapkan NotificationReceiverService untuk memberi tahu aplikasi Anda tentang peran yang ditetapkan. Anda harus memberi tag pada layanan Anda di AndroidManifest.xml dengan tepat agar layanan tersebut dapat ditemukan secara otomatis oleh ADP.
- Aplikasi Anda harus memiliki tepat satu layanan yang merupakan
enableddan memilikimeta-datadenganandroid:nameyang sama dengancom.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES - Layanan ini harus memiliki
android:exportedyang ditetapkan ketrue android:valuedarimeta-dataharus ditetapkan ke string kosong
<service
android:name=".MyNotificationReceiverService"
android:exported="true">
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES" android:value="" />
</service>
Jika Anda sedang menguji peran COMPANION_APP, Anda juga harus menambahkan meta-data berikut ke layanan Anda agar Android Device Policy dapat mengirimkan update status perintah lokal ke aplikasi Anda:
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_COMMAND_STATUS" android:value="" />
Buat layanan yang memperluas NotificationReceiverService (atau perbarui yang ada)
Buat atau perbarui NotificationReceiverService yang ada dan terapkan
AppRolesListener untuk memantau peran yang ditetapkan ke aplikasi Anda. Hanya
getAppRolesListener() yang diperlukan untuk memantau peran yang ditetapkan ke aplikasi
Anda. Jika aplikasi Anda diberi peran COMPANION_APP, Anda juga harus menerapkan
getCommandListener():
import android.util.Log
import com.google.android.managementapi.approles.AppRolesListener
import com.google.android.managementapi.approles.model.AppRolesSetRequest
import com.google.android.managementapi.approles.model.AppRolesSetResponse
import com.google.android.managementapi.commands.CommandListener
import com.google.android.managementapi.commands.model.Command
import com.google.android.managementapi.notification.NotificationReceiverService
class MyNotificationReceiverService : NotificationReceiverService() {
// If your app wants to listen for roles assigned
override fun getAppRolesListener(): AppRolesListener =
object : AppRolesListener {
override fun onAppRolesSet(request: AppRolesSetRequest): AppRolesSetResponse {
val roleTypes = request.roles.map { role -> role.roleType }
Log.i(TAG, "onAppRolesSet: $roleTypes")
return AppRolesSetResponse.getDefaultInstance()
}
}
// If your app wants to listen for local command status updates
// Only relevant for COMPANION_APP role
override fun getCommandListener(): CommandListener {
return object : CommandListener {
override fun onCommandStatusChanged(command: Command) {
Log.i(TAG, "onCommandStatusChanged")
}
}
}
private companion object {
const val TAG = "MyNotificationReceiverService"
}
}
Aplikasi Anda dapat diberi tahu beberapa kali jika perannya berubah beberapa kali. Jika semua peran dihapus, aplikasi Anda akan tetap diberi tahu dengan daftar peran kosong. Notifikasi ini akan mengeluarkan aplikasi Anda dari status berhenti dan bersama dengan
pengecualian yang diberikan untuk aplikasi Anda, aplikasi Anda dapat melakukan bootstrap sendiri tanpa
interaksi pengguna. Berkat notifikasi dan pengecualian peran aplikasi, aplikasi Anda dapat memproses siaran ACTION_BOOT_COMPLETED. Jika aplikasi Anda bergantung pada
konfigurasi terkelolanya untuk melakukan bootstrap sendiri, lihat
Menyiapkan konfigurasi terkelola tentang cara membaca dan memantau
perubahan.
Menyediakan perangkat dengan kebijakan peran aplikasi
Developer aplikasi dapat menguji penetapan peran aplikasi ke aplikasi mereka menggunakan EMM atau mengikuti panduan memulai Android Management API. Notebook Colab AMAPI memungkinkan Anda mendaftarkan perusahaan, membuat kebijakan,dan menyediakan perangkat.
Menetapkan kebijakan untuk aplikasi Anda dengan peran aplikasi
Siapkan policy dengan peran aplikasi yang dimaksudkan untuk dimiliki aplikasi Anda menggunakan
ApplicationPolicy.roles.
Contoh berikut menunjukkan cara mengonfigurasi peran untuk aplikasi MTD:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Sebelum menetapkan peran seperti yang ditentukan dalam kebijakan, sistem akan memeriksa apakah sidik jari sertifikat kunci penandatanganan aplikasi di perangkat cocok dengan yang ada di Play Store.
Jika sidik jari berbeda, peran tidak akan ditetapkan ke aplikasi dan NonComplianceReason.APP_SIGNING_CERT_MISMATCH
ketidakpatuhan akan dilaporkan ke EMM.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"signingKeyCerts": [
{ "signingKeyCertFingerprintSha256": "base64-encoded-sha256" }
],
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Jika aplikasi Anda memiliki konfigurasi terkelola, admin IT dapat menyiapkan konfigurasi awal untuk restriction yang relevan dalam kebijakan aplikasi:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}
Memverifikasi Status Pengecualian Baterai
Aplikasi dengan peran Mobile Threat Defense (MTD) otomatis dikecualikan dari pembatasan daya latar belakang standar. Namun, pengecualian ini diterapkan oleh Bucket Aplikasi Standby, bukan Daftar Aplikasi yang Diizinkan untuk Menggunakan Daya sistem.
Untuk memverifikasi apakah pengecualian aplikasi aktif:
import android.app.usage.UsageStatsManager
import android.content.Context
// UsageStatsManager.STANDBY_BUCKET_EXEMPTED is annotated as a @SystemApi. We can redefine it for clarity.
// Define this at the top level of your file, or inside a companion object
private const val STANDBY_BUCKET_EXEMPTED = 5
private fun isAppExemptedFromAppStandbyBucket(): Boolean =
(getSystemService(Context.USAGE_STATS_SERVICE) as? UsageStatsManager)
?.appStandbyBucket == STANDBY_BUCKET_EXEMPTED