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 aplikasi dapat menjalankan fungsi pentingnya tanpa gangguan. Selain itu, aplikasi dapat diberi tahu tentang peran yang ditetapkan, sehingga dapat melakukan bootstrap sendiri tanpa intervensi pengguna.
Untuk mengetahui daftar peran aplikasi yang tersedia dan hak istimewa khusus yang diberikan ke
setiap peran, lihat RoleType.
Prasyarat
Perangkat dikelola oleh EMM berbasis AMAPI (EMM yang menggunakan DPC kustom tidak didukung).
Mempersiapkan aplikasi untuk menggunakan fitur ini
Integrasi dengan AMAPI SDK hanya diperlukan jika aplikasi ingin diberi tahu tentang peran yang ditetapkan sehingga dapat melakukan bootstrap 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 class Anda
yang mengimplementasikan NotificationReceiverService untuk memberi tahu aplikasi Anda tentang
peran yang ditetapkan. Anda harus menandai layanan di AndroidManifest.xml dengan tepat agar dapat ditemukan secara otomatis oleh ADP.
- Aplikasi Anda harus memiliki tepat satu layanan yang
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 menguji peran COMPANION_APP, Anda juga harus menambahkan
meta-data berikut ke layanan 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="" />
Membuat layanan yang memperluas NotificationReceiverService (atau memperbarui yang sudah ada)
Buat atau perbarui NotificationReceiverService yang ada dan terapkan
AppRolesListener untuk memproses peran yang ditetapkan ke aplikasi Anda. Hanya
getAppRolesListener() yang diperlukan untuk memproses peran yang ditetapkan ke
aplikasi Anda. Jika aplikasi Anda ditetapkan sebagai peran COMPANION_APP, Anda juga harus mengimplementasikan
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 ACTION_BOOT_COMPLETED siaran. Jika aplikasi Anda bergantung pada
konfigurasi terkelola untuk melakukan bootstrap sendiri, lihat
Menyiapkan konfigurasi terkelola tentang cara membaca dan memproses
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 AMAPI Colab 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 sidik jari dari 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 restrictions 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 diimplementasikan oleh Bucket Siaga Aplikasi, 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