Device Policy Controller erstellen

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.

  1. Fügen Sie die Bibliothek der Datei build.gradle hinzu:

    Groovig

    implementation(name:'dpcsupport-yyyymmdd', ext:'aar')
    

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
    
  2. 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:

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 den Users.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 Methoden onAccountReady() und onFailure() 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 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.