Mit der Funktion „Anwendungsrollen“ kann ein IT‑Administrator einer verwalteten Anwendung auf einem Android-Gerät spezielle Berechtigungen gewähren. Durch die Zuweisung einer bestimmten Rolle kann eine App von Energie- und Hintergrundbeschränkungen, Sperrungen und dem Ruhezustand (ab Android 14) ausgenommen werden. Außerdem können Nutzersteuerungen (z. B. Nutzeraktionen wie das Erzwingen des Beendens und das Löschen von App-Daten) deaktiviert werden (ab Android 11), sodass die App ihre wichtige Funktion ohne Unterbrechung ausführen kann. Außerdem kann die App über ihre zugewiesenen Rollen benachrichtigt werden, sodass sie sich ohne Eingriff des Nutzers selbst starten kann.
Vorbereitung
Das Gerät wird von einem AMAPI-basierten EMM verwaltet (EMMs mit einem benutzerdefinierten DPC werden nicht unterstützt).
App für die Verwendung der Funktion vorbereiten
Die Integration des AMAPI SDK ist nur erforderlich, wenn die App über ihre zugewiesenen Rollen benachrichtigt werden möchte, damit sie sich selbst starten kann (d.h. automatisch ohne Nutzerinteraktion).
AMAPI SDK in Ihre App einbinden
Weitere Informationen zum AMAPI SDK und dazu, wie Sie es Ihrer App hinzufügen, finden Sie im AMAPI SDK-Integrationsleitfaden.
Fügen Sie dem Manifest der App die erforderlichen Metadaten hinzu.
Die Android Device Policy App (ADP) muss die ComponentName
Ihrer Klasse kennen, die NotificationReceiverService
implementiert, um Ihre App über die zugewiesenen Rollen zu benachrichtigen. Sie müssen Ihren Dienst in AndroidManifest.xml
entsprechend taggen, damit er von ADP automatisch erkannt werden kann.
- Ihre App muss genau einen Dienst haben, der
enabled
ist undmeta-data
mitandroid:name
gleichcom.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES
hat. - Für diesen Dienst muss
android:exported
auftrue
festgelegt sein. - Die
android:value
desmeta-data
muss auf einen leeren String gesetzt werden.
<service
android:name=".MyNotificationReceiverService"
android:exported="true">
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_APP_ROLES" android:value="" />
</service>
Wenn Sie die Rolle COMPANION_APP
testen, sollten Sie Ihrem Dienst auch die folgende meta-data
hinzufügen, damit die Android Device Policy Statusaktualisierungen für lokale Befehle an Ihre App senden kann:
<meta-data android:name="com.google.android.managementapi.notification.NotificationReceiverService.SERVICE_COMMAND_STATUS" android:value="" />
Dienst erstellen, der NotificationReceiverService erweitert (oder vorhandenen Dienst aktualisieren)
Erstellen oder aktualisieren Sie Ihre vorhandene NotificationReceiverService
und implementieren Sie eine AppRolesListener
, um auf Rollen zu warten, die Ihrer App zugewiesen sind. Nur getAppRolesListener()
ist erforderlich, um auf Rollen zu warten, die Ihrer App zugewiesen sind. Wenn Ihrer App die Rolle COMPANION_APP
zugewiesen ist, sollten Sie auch getCommandListener()
implementieren:
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"
}
}
Ihre App kann mehrmals benachrichtigt werden, wenn sich ihre Rollen mehrmals ändern. Wenn alle Rollen entfernt werden, wird Ihre App weiterhin mit einer leeren Liste von Rollen benachrichtigt. Durch diese Benachrichtigung wird der Status Ihrer App von „Angehalten“ in „Aktiv“ geändert. Zusammen mit den für Ihre App gewährten Ausnahmen kann Ihre App ohne Nutzerinteraktion gestartet werden. Dank der Benachrichtigung zu App-Rollen und der Ausnahmen kann Ihre App auf ACTION_BOOT_COMPLETED
-Broadcasts reagieren. Wenn Ihre App auf verwaltete Konfigurationen angewiesen ist, um sich selbst zu starten, finden Sie unter Verwaltete Konfigurationen einrichten Informationen dazu, wie Sie Änderungen lesen und darauf reagieren können.
Gerät mit App-Rollenrichtlinien bereitstellen
App-Entwickler können das Zuweisen von App-Rollen zu ihrer Anwendung mit einem EMM testen oder der Kurzanleitung zur Android Management API folgen. Mit dem AMAPI-Colab-Notebook können Sie ein Unternehmen registrieren, eine Richtlinie erstellen und ein Gerät bereitstellen.
Richtlinie für Ihre App mit App-Rollen festlegen
Richten Sie eine policy
mit den App-Rollen ein, die Ihre App haben soll, indem Sie ApplicationPolicy.roles
verwenden.
Das folgende Beispiel zeigt, wie die Rolle für MTD-Apps konfiguriert wird:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Bevor die in der Richtlinie angegebenen Rollen zugewiesen werden, prüft das System, ob der Fingerabdruck des Zertifikats für den Signaturschlüssel der App auf dem Gerät mit dem im Play Store übereinstimmt.
Wenn der Fingerabdruck abweicht, werden die Rollen nicht der App zugewiesen und die NonComplianceReason.APP_SIGNING_CERT_MISMATCH
-Nichtkonformität wird dem EMM gemeldet.
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"signingKeyCerts": [
{ "signingKeyCertFingerprintSha256": "base64-encoded-sha256" }
],
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
]
}
]
}
Wenn Ihre App eine verwaltete Konfiguration hat, kann der IT‑Administrator eine Erstkonfiguration für die relevanten restriction
s in der Anwendungsrichtlinie einrichten:
{
"applications": [
{
"packageName": "com.example.mtd",
"installType": "FORCE_INSTALLED",
"roles": [
{ "roleType": "MOBILE_THREAT_DEFENSE_ENDPOINT_DETECTION_RESPONSE" }
],
"managedConfiguration": {
"<key>": "<value>"
}
}
]
}