In diesem Leitfaden wird beschrieben, wie Sie einen Device Policy Controller (DPC) für Geräte in einer Android Enterprise-Bereitstellung entwickeln. Eine DPC-Anwendung, zuvor als Work Policy Controller bezeichnet, steuert lokale Geräterichtlinien und Systemanwendungen auf Geräten.
Informationen zu DPCs
Bei einer Android Enterprise-Bereitstellung hat ein Unternehmen die Kontrolle über verschiedene Aspekte der Nutzergeräte, z. B. das Isolieren arbeitsbezogener Informationen von den privaten Daten der Nutzer, die Vorkonfigurierung genehmigter Apps für die Umgebung oder das Deaktivieren von Gerätefunktionen (z. B. der Kamera).
Als EMM entwickeln Sie eine DPC-Anwendung, die von Ihren Kunden in Verbindung mit Ihrer EMM-Konsole und Ihrem Server genutzt werden kann. Ihr Kunde stellt den DPC auf den von ihm verwalteten Nutzergeräten bereit. Der DPC fungiert als Brücke zwischen Ihrer EMM-Konsole (und dem Server) und dem Gerät. Ein Administrator verwendet die EMM-Konsole für eine Reihe von Aufgaben, einschließlich der Konfiguration von Geräteeinstellungen und Apps.
Der DPC erstellt und verwaltet das Arbeitsprofil auf dem Gerät, auf dem es installiert ist. Das Arbeitsprofil verschlüsselt arbeitsbezogene Informationen und hält sie von den privaten Apps und Daten der Nutzer getrennt. Vor dem Erstellen des Arbeitsprofils kann der DPC auch ein Managed Google Play-Konto zur Verwendung auf dem Gerät bereitstellen.
In diesem Leitfaden erfahren Sie, wie Sie einen DPC entwickeln, mit dem Arbeitsprofile erstellt und verwaltet werden können.
DPC-Supportbibliothek für EMMs
Die DPC-Supportbibliothek für EMMs umfasst Dienst- und Hilfsklassen, die die Bereitstellung und Verwaltung von Android-Geräten in einer Unternehmensumgebung erleichtern. Mit der Bibliothek können Sie wichtige Funktionen in Ihren DPC-Anwendungen nutzen:
- Unterstützung für die Bereitstellung von Managed Google Play-Konten: Für die Bereitstellung von Managed Google Play-Konten über die DPC-App müssen Google Play- und Google Play-Dienste-Anwendungen die Mindestversionsanforderungen erfüllen. Das Aktualisieren dieser Apps kann jedoch komplex sein. Die DPC-Supportbibliothek aktualisiert diese Anwendungen und sorgt auch für die Kompatibilität mit zukünftigen Updates des Bereitstellungsprozesses für verwaltete Google Play-Konten. Weitere Informationen finden Sie unter Support für die Bereitstellung von Managed Google Play-Konten.
- Unterstützung verwalteter Konfigurationen: Die Verwendung der Play EMM API zur Verarbeitung verwalteter Konfigurationen für genehmigte Apps ist die einfachste Möglichkeit, verwaltete Konfigurationen auf Ihrem DPC zu implementieren. Mit der DPC-Supportbibliothek können Sie Google Play die Aufgabe der Anwendung verwalteter Konfigurationen (früher „App-Einschränkungen“) delegieren, die vom Administrator in Ihrer EMM-Konsole festgelegt wurden. Wenn Sie die Play EMM API zum Verarbeiten verwalteter Konfigurationen verwenden, kann die App-Konfiguration während der Installation automatisch angewendet werden. Weitere Informationen zum Aktivieren dieser Funktion in Ihrem DPC finden Sie unter Verwaltete Konfigurationen auf geschäftliche Anwendungen anwenden.
So laden Sie die Bibliothek herunter: Bei den in dieser Anleitung beschriebenen Aufgaben wird die DPC-Supportbibliothek verwendet.
DPC-Supportbibliothek herunterladen
Wenn Sie die DPC-Supportbibliothek verwenden möchten, laden Sie sie aus der Community von Android Enterprise-EMM-Anbietern herunter. Sie müssen die Bibliothek beim Erstellen der DPC-Anwendung in die Datei build.gradle-Datei aufnehmen und auf andere Abhängigkeiten achten. Für die Bibliothek ist beispielsweise die Google Play Services Auth-Clientbibliothek (Version 11.4.0) erforderlich.
- Fügen Sie die Bibliothek der Datei
build.gradle
hinzu:
Groovig
implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
Kotlin
implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
- Fügen Sie der Datei „build.gradle“-Datei die
Google Play-Dienste-Authentifizierungs-Clientbibliothek als Version 11.4.hinzu:
Groovig
implementation 'com.google.android.gms:play-services-auth:11.4.0'
Kotlin
implementation("com.google.android.gms:play-services-auth:11.4.0")
Für die Ausführung der Bibliothek sind bestimmte Berechtigungen erforderlich. Daher müssen Sie diese beim Hochladen in Google Play dem Manifest Ihrer DPC-App hinzufügen:
<uses-permission android:name= "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> <uses-permission android:name= "android.permission.GET_ACCOUNTS"/> <uses-permission android:name= "android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name= "android.permission.WRITE_SYNC_SETTINGS"/> <uses-permission android:name= "com.google.android.providers.gsf.permission.READ_GSERVICES"/>
Zusätzlich zu diesen ersten Einrichtungs- und Bereitstellungsschritten müssen Sie abhängig von der zu implementierenden Funktion auch die spezifische Bibliotheksfunktion in Ihrem DPC-Code initialisieren. Ausführliche Informationen dazu finden Sie in den entsprechenden Abschnitten unten.
DPC erstellen
Erstellen Sie Ihren DPC auf dem vorhandenen Modell, das für Anwendungen zur Geräteverwaltung verwendet wird.
Insbesondere muss Ihre Anwendung die Klasse
DeviceAdminReceiver
(eine Klasse aus dem Paket android.app.admin
) abgeleitet haben, wie unter
Geräteverwaltung beschrieben.
Arbeitsprofil erstellen
Ein Beispiel zum Erstellen eines einfachen Arbeitsprofils findest du auf GitHub unter BasicManagedProfile.
Wenn Sie ein Arbeitsprofil auf einem Gerät erstellen möchten, das bereits ein privates Profil hat, müssen Sie zuerst prüfen, ob das Gerät ein Arbeitsprofil unterstützt. Dazu prüfen Sie, ob die Systemfunktion FEATURE_MANAGED_USERS
vorhanden ist:
Kotlin
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
Java
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) { // This device does not support work profiles! }
Wenn das Gerät Arbeitsprofile unterstützt, erstellen Sie ein Arbeitsprofil, indem Sie einen Intent mit der Aktion ACTION_PROVISION_MANAGED_PROFILE senden. (In manchen Dokumentationen ist verwaltetes Profil ein allgemeiner Begriff, der im Kontext von Android im Unternehmen mit Arbeitsprofil identisch ist.) Gib zusätzlich den Paketnamen des Geräteherstellers an:
Kotlin
val provisioningActivity = getActivity() // You'll need the package name for the DPC app. val myDPCPackageName = "com.example.myDPCApp" // Set up the provisioning intent val adminComponent = ComponentName(provisioningActivity.applicationContext, MyAdminReceiver::class.java) provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()) if (provisioningIntent.resolveActivity(provisioningActivity.packageManager) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE) provisioningActivity.finish() }
Java
Activity provisioningActivity = getActivity(); // You'll need the package name for the DPC app. String myDPCPackageName = "com.example.myDPCApp"; // Set up the provisioning intent Intent provisioningIntent = new Intent("android.app.action.PROVISION_MANAGED_PROFILE"); ComponentName adminComponent = new ComponentName(provisioningActivity.getApplicationContext(), MyAdminReceiver.class); provisioningIntent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, adminComponent.flattenToString()); if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager()) == null) { // No handler for intent! Can't provision this device. // Show an error message and cancel. } else { // REQUEST_PROVISION_MANAGED_PROFILE is defined // to be a suitable request code startActivityForResult(provisioningIntent, REQUEST_PROVISION_MANAGED_PROFILE); provisioningActivity.finish(); }
Das System reagiert auf diesen Intent folgendermaßen:
- Überprüft, ob das Gerät verschlüsselt ist. Ist dies nicht der Fall, fordert das System den Nutzer auf, das Gerät vor dem Fortfahren zu verschlüsseln.
- Ein Arbeitsprofil wird erstellt.
- Nicht benötigte Apps werden aus dem Arbeitsprofil entfernt.
- Kopiert die DPC-Anwendung in das Arbeitsprofil und legt den DPC selbst als Profilinhaber fest.
Überschreiben Sie
onActivityResult()
, um zu sehen, ob die Bereitstellung erfolgreich war:
Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data) } }
Java
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // Check if this is the result of the provisioning activity if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) { // If provisioning was successful, the result code is // Activity.RESULT_OK if (resultCode == Activity.RESULT_OK) { // Work profile created and provisioned. } else { // Provisioning failed. } return; } else { // This is the result of some other activity. Call the superclass. super.onActivityResult(requestCode, resultCode, data); } }
Aktivierung des Arbeitsprofils abschließen
Wenn das Profil bereitgestellt wurde, ruft das System die Methode
DeviceAdminReceiver.onProfileProvisioningComplete()
der DPC-Anwendung auf. Überschreiben Sie diese Callback-Methode, um die Aktivierung des Arbeitsprofils abzuschließen.
Eine typische DeviceAdminReceiver.onProfileProvisioningComplete()
-Callback-Implementierung führt folgende Schritte aus:
- Überprüft, ob das Gerät den EMM-Geräterichtlinien entspricht, wie unter Geräterichtlinien einrichten beschrieben.
- Hiermit werden die Systemanwendungen aktiviert, die der Administrator im Arbeitsprofil mit
DevicePolicyManager.enableSystemApp()
zur Verfügung gestellt hat. - Verwendet das Gerät Managed Google Play, wird dem Arbeitsprofil das entsprechende Konto hinzugefügt, damit genehmigte Apps auf dem Gerät installiert werden können.
- Managed Google Play-Konten: Weitere Informationen findest du unter Arbeitsumgebung für Managed Google Play-Konten prüfen und Managed Google Play-Konto hinzufügen.
- Google-Konten: Verwenden Sie
AccountManager.addAccount()
.
Arbeitsprofil aktivieren
Wenn Sie diese Aufgaben abgeschlossen haben, rufen Sie die Methode
setProfileEnabled()
des Geräterichtlinienmanagers auf, um das Arbeitsprofil zu aktivieren:
Kotlin
// Get the device policy manager val myDevicePolicyMgr = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val componentName = myDeviceAdminReceiver.getComponentName(this) // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile") // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName)
Java
// Get the device policy manager DevicePolicyManager myDevicePolicyMgr = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName componentName = myDeviceAdminReceiver.getComponentName(this); // Set the name for the newly created work profile. myDevicePolicyMgr.setProfileName(componentName, "My New Work Profile"); // ...and enable the profile myDevicePolicyMgr.setProfileEnabled(componentName);
Geräterichtlinien einrichten
Die DPC-Anwendung wendet die von einem Administrator festgelegten Geräterichtlinien an, um die Anforderungen und Einschränkungen einer Organisation zu erfüllen. Beispielsweise kann es in den Sicherheitsrichtlinien erforderlich sein, dass Geräte nach einer bestimmten Anzahl fehlgeschlagener Passworteingaben gesperrt werden. Der DPC fragt die EMM-Konsole nach aktuellen Richtlinien ab und wendet die Richtlinien dann mithilfe der Device Administration API an.
Informationen zum Anwenden von Geräterichtlinien finden Sie unter Richtlinien.
Verwaltete Konfigurationen auf geschäftliche Apps anwenden
Mit verwalteten Konfigurationen können Sie Ihren Kunden die Möglichkeit geben, die für die Bereitstellung genehmigten Anwendungen vorzukonfigurieren und diese Anwendungen dann einfach zu aktualisieren, wenn die Konfiguration geändert werden muss. Wenn Sie eine App vor der Bereitstellung konfigurieren, wird sichergestellt, dass die Sicherheits- und sonstigen Richtlinien der Organisation bei der Installation der App auf dem Zielgerät eingehalten werden.
Die App-Funktionen werden vom App-Entwickler in einem XML-Schema (dem Schema für verwaltete Konfigurationen) definiert, das der App beim Hochladen in Google Play begleitet wird. App-Entwickler finden weitere Informationen unter Verwaltete Konfigurationen einrichten.
Sie rufen dieses Schema aus der App ab, um es Ihren Kundenadministratoren in der EMM-Konsole anzuzeigen, stellen eine UI bereit, in der die verschiedenen in der Schemaanzeige definierten Optionen verfügbar sind, und ermöglichen es Administratoren, die Einstellungen der App vorzukonfigurieren. Die daraus resultierende verwaltete Konfiguration, die vom Administrator festgelegt wurde, wird in der Regel auf dem EMM-Server gespeichert, der dann über die Play EMM API Managedconfigurationsfordevice oder Managedconfigurationsforuser festlegt. Weitere Informationen finden Sie unter Verwaltete Konfigurationen über Google Play.
Verwaltete Konfigurationen können mit der Play EMM API (empfohlener Ansatz) oder direkt über den DPC auf die App angewendet werden (siehe Verwaltete Konfigurationen direkt vom DPC anwenden). Die Verwendung der Play EMM API bietet mehrere Vorteile, unter anderem eine einfache Implementierung, da Sie DPC-Aufgaben mithilfe der DPC Support Library vereinfachen können. Außerdem gilt für die Play EMM API Folgendes:
- Legt die Konfiguration in kleinstmöglichen Schritten fest, wenn eine neue App installiert wird. So wird sichergestellt, dass die App bereit ist, wenn der Nutzer sie zum ersten Mal startet.
- Hiermit können Sie Konfigurationen auf Nutzerbasis verwalten, sodass Sie nicht jedes einzelne Gerät im Blick behalten müssen.
Verwaltete Konfigurationen mithilfe der Play EMM API anwenden
Damit die Play EMM API für verwaltete Konfigurationen verwendet werden kann, muss der DPC Google Play erlauben, Konfigurationen festzulegen. Die DPC-Supportbibliothek übernimmt diese Aufgabe für Sie, indem sie die von Google Play gesendete Konfiguration weiterleitet.
Laden Sie die DPC-Supportbibliothek herunter und aktivieren Sie dann die Unterstützung für verwaltete Konfigurationen auf Ihrem DPC, um die Play EMM API zu verwenden.
Unterstützung für verwaltete Konfigurationen in Ihrem DPC aktivieren
Importieren Sie diese Klasse in Ihren DPC:
com.google.android.apps.work.dpcsupport.ManagedConfigurationsSupport
Initialisieren Sie die Bibliothek für verwaltete Konfigurationen. In diesem Beispiel ist „admin“ der ComponentName von DeviceAdminReceiver.
Kotlin
var managedConfigurationsSupport = ManagedConfigurationsSupport(context, admin)
Java
ManagedConfigurationsSupport managedConfigurationsSupport = new ManagedConfigurationsSupport(context, admin);
Verwaltete Konfigurationen aktivieren:
Kotlin
managedConfigurationsSupport.enableManagedConfigurations()
Java
managedConfigurationsSupport.enableManagedConfigurations();
Wenn diese Bibliothek in Ihrem DPC initialisiert wird, können Sie die Google Play EMM API in Ihrer EMM-Konsole und Ihrem EMM-Server verwenden, um verwaltete Konfigurationen auf genehmigte Apps anzuwenden, anstatt diese Aufgaben direkt im DPC zu codieren. Weitere Informationen finden Sie unter Verwaltete Konfigurationen über Google Play.
Verwaltete Konfigurationen direkt vom DPC aus anwenden
Wenn Sie die Konfigurationseinstellungen einer App direkt über den DPC ändern möchten, rufen Sie die Methode DevicePolicyManager.setApplicationRestrictions() auf und übergeben Sie Parameter für den DeviceAdminReceiver der DPC-Anwendung, den Paketnamen der Ziel-App und das Bundle, das die vom Administrator festgelegte verwaltete Konfiguration der App enthält. Weitere Informationen finden Sie unter Interaktion zwischen DPC und EMM-Konsole und Verwaltete Konfigurationen einrichten. Beachten Sie jedoch, dass dieser alternative Ansatz zur Anwendung verwalteter Konfigurationen bei Bereitstellungen von Managed Google Play-Konten nicht empfohlen wird.
Support für die Bereitstellung eines verwalteten Google Play-Kontos
Die DPC-Supportbibliothek bietet Unterstützung für die Bereitstellung von Managed Google Play-Konten. Damit Sie diese Unterstützung nutzen können, müssen Sie zuerst die Bibliothek initialisieren. Anschließend können Sie die Arbeitsumgebung prüfen und ein verwaltetes Google Play-Konto hinzufügen.
Unterstützung für Managed Google Play-Konten in deinem DPC initialisieren
Importieren Sie diese Klasse in Ihren DPC:
com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport
Initialisieren Sie die Nutzerverwaltungs-Kompatibilitätsbibliothek. In diesem Beispiel ist „admin“ der ComponentName
von
DeviceAdminReceiver
.
Kotlin
var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)
Java
AndroidForWorkAccountSupport androidForWorkAccountSupport = new AndroidForWorkAccountSupport(context, admin);
Sorgen Sie dafür, dass die Arbeitsumgebung für Managed Google Play-Konten
Nachdem der DPC ein Gerät im Profilinhabermodus (ACTION_PROVISION_MANAGED_PROFILE
) oder Geräteinhabermodus (ACTION_PROVISION_MANAGED_DEVICE
) bereitgestellt hat, muss das Gerät Managed Google Play-Konten unterstützen. Dazu rufst du Folgendes auf:
Kotlin
androidForWorkAccountSupport.ensureWorkingEnvironment(callback)
Java
androidForWorkAccountSupport.ensureWorkingEnvironment(callback);
Der Callback meldet den Erfolg oder Misserfolg dieses Prozesses. Wenn der Callback erfolgreich zurückgegeben wird, kann ein verwaltetes Google Play-Konto hinzugefügt werden. Wenn der Callback einen Fehler meldet, frage den Nutzer, ob das Gerät eine Netzwerkverbindung hat, z. B. wenn der Download fehlschlägt. In anderen Fällen müssen Sie Google den Fehler melden.
Kotlin
object : WorkingEnvironmentCallback() { override fun onSuccess() { // Can now provision the managed Google Play Account } override fun onFailure(error: Error) { // Notify user, handle error (check network connection) } }
Java
new WorkingEnvironmentCallback() { @Override public void onSuccess() { // Can now provision the managed Google Play Account } @Override public void onFailure(Error error) { // Notify user, handle error (check network connection) } }
Managed Google Play-Konto hinzufügen
Mit dem AccountManager
des Android-Frameworks kann einem Gerät ein Managed Google Play-Konto hinzugefügt werden. Um die Interaktion mit AccountManager
zu vereinfachen, können Sie die Hilfsfunktion (im Beispiel unten gezeigt) aus der DPC-Supportbibliothek verwenden. Die Funktion verarbeitet das vom Google Play-Server zurückgegebene Token und erleichtert die Bereitstellung des verwalteten Google Play-Kontos. Die Funktion gibt zurück, wenn das verwaltete Google Play-Konto einen gültigen Status hat:
Kotlin
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)
Java
androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
token
: Das Nutzerauthentifizierungstoken, das durch denUsers.generateAuthenticationToken()
-Aufruf der Google Play EMM API generiert wurde.accountAddedCallback
: Gibt das Managed Google Play-Konto zurück, das dem Gerät hinzugefügt wurde. Dieser Callback sollte die MethodenonAccountReady()
undonFailure()
enthalten.
Kotlin
val workAccountAddedCallback = object : WorkAccountAddedCallback() { override fun onAccountReady(account: Account, deviceHint: String) { // Device account was successfully added to the device // and is ready to be used. } override fun onFailure(error: Error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } }
Java
WorkAccountAddedCallback workAccountAddedCallback = new WorkAccountAddedCallback() { @Override public void onAccountReady(Account account, String deviceHint) { // Device account was successfully added to the device // and is ready to be used. } @Override public void onFailure(Error error) { // The account was not successfully added. Check that the token // provided was valid (it expires after a certain period of time). } };
Weitere Dokumentation
- Weitere Informationen zur Device Administration API finden Sie unter Device Administration.
- Weitere Informationen zu Bereitstellungsmethoden für Android Enterprise finden Sie im Entwicklerhandbuch für Android Enterprise unter Geräte bereitstellen.
- Ein GitHub-Beispiel, das zeigt, wie ein einfaches Arbeitsprofil erstellt wird, finden Sie unter BasicManagedProfile.
- Ein GitHub-Beispiel, das zeigt, wie Konfigurationen in anderen Anwendungen als Profilinhaber festgelegt werden, finden Sie unter AppRestrictionEnforcer.