Device Policy Controller erstellen

In dieser Anleitung wird beschrieben, wie Sie einen Device Policy Controller (DPC) für Geräte in einer Android Enterprise-Bereitstellung entwickeln. Eine DPC-App, die früher als Arbeitsrichtlinien-Controller bezeichnet wurde, steuert lokale Geräterichtlinien und Systemanwendungen auf Geräten.

Informationen zu DPCs

Bei einer Android Enterprise-Bereitstellung behält ein Unternehmen die Kontrolle über verschiedene Aspekte von Nutzergeräten, z. B. die Trennung von arbeitsbezogenen Informationen von den personenbezogenen Daten der Nutzer, die Vorkonfiguration genehmigter Apps für die Umgebung oder die Deaktivierung von Gerätefunktionen (z. B. der Kamera).

Als EMM entwickeln Sie eine DPC-App, die Ihre Kunden in Verbindung mit Ihrer EMM-Konsole und Ihrem Server verwenden können. Ihr Kunde stellt den DPC auf den von ihm verwalteten Nutzergeräten bereit. Der DPC dient als Brücke zwischen Ihrer EMM-Konsole (und Ihrem Server) und dem Gerät. Ein Administrator verwendet die EMM-Konsole für eine Reihe von Aufgaben, darunter das Konfigurieren von Geräteeinstellungen und Apps.

Der DPC erstellt und verwaltet das Arbeitsprofil auf dem Gerät, auf dem er installiert ist. Im Arbeitsprofil werden geschäftliche Informationen verschlüsselt und von den privaten Apps und Daten der Nutzer getrennt. Bevor das Arbeitsprofil erstellt wird, kann der DPC auch ein verwaltetes Google Play-Konto für die Verwendung auf dem Gerät bereitstellen.

In dieser Anleitung erfahren Sie, wie Sie einen DPC entwickeln, der Arbeitsprofile erstellen und verwalten kann.

DPC Support Library für EMMs

Die DPC Support Library für EMMs umfasst Hilfs- und Utility-Klassen, die die Bereitstellung und Verwaltung von Android-Geräten in einer Unternehmensumgebung erleichtern. Mit der Bibliothek können Sie wichtige Funktionen in Ihren DPC-Apps 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 die Google Play- und Google Play-Dienste-Apps die Mindestversionsanforderungen erfüllen. Die Aktualisierung dieser Apps kann jedoch komplex sein. Die DPC-Supportbibliothek kümmert sich um die Aktualisierung dieser Apps 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 Unterstützung für die Bereitstellung von Managed Google Play-Konten.
  • Unterstützung verwalteter Konfigurationen: Die Play EMM API ist die einfachste Möglichkeit, verwaltete Konfigurationen für genehmigte Apps in Ihrem DPC zu implementieren. Mit der DPC Support Library können Sie die Aufgabe, vom Administrator über Ihre EMM-Konsole festgelegte verwaltete Konfigurationen (früher: App-Einschränkungen) anzuwenden, an Google Play delegieren. Wenn Sie die Play EMM API verwenden, um verwaltete Konfigurationen zu verarbeiten, kann die App-Konfiguration während der Installation atomar angewendet werden. Weitere Informationen zum Aktivieren dieser Funktion in Ihrem DPC finden Sie unter Verwaltete Konfigurationen auf Arbeits-Apps anwenden.

Führen Sie die folgenden Schritte aus, um die Bibliothek herunterzuladen. Bei den in diesem Leitfaden beschriebenen Aufgaben wird davon ausgegangen, dass die DPC Support Library verwendet wird.

DPC-Supportbibliothek herunterladen

Wenn Sie die DPC Support Library verwenden möchten, laden Sie sie aus der Android Enterprise EMM Provider-Community herunter. Sie müssen die Bibliothek Ihrer build.gradle-Datei hinzufügen und sich beim Erstellen Ihrer DPC-App um andere Abhängigkeiten kümmern. Für die Bibliothek ist beispielsweise die Google Play-Dienste-Clientbibliothek für die Authentifizierung in Version 11.4.0 erforderlich.

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

    Groovy

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

    Kotlin

    implementation(name = "dpcsupport-yyyymmdd", ext = "aar")
  2. Fügen Sie der Datei „build.gradle“ die Google Play-Dienste-Clientbibliothek für die Authentifizierung 11.4.0 hinzu:

    Groovy

    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. Diese müssen Sie dem Manifest Ihrer DPC-App hinzufügen, wenn Sie sie in Google Play hochladen:

  <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 vorbereitenden Einrichtungs- und Bereitstellungsschritten müssen Sie auch die spezifische Bibliotheksfunktion in Ihrem DPC-Code initialisieren, je nachdem, welche Funktion Sie implementieren möchten. Die Details finden Sie in den entsprechenden Abschnitten unten.

DPC erstellen

Erstellen Sie Ihren DPC auf Grundlage des vorhandenen Modells für Geräteadministratoranwendungen. Ihre App muss die Klasse DeviceAdminReceiver (eine Klasse aus dem Paket android.app.admin) ableiten, wie unter Geräteverwaltung beschrieben.

Arbeitsprofil erstellen

Ein Beispiel für die Erstellung eines einfachen Arbeitsprofils finden Sie unter BasicManagedProfile auf GitHub.

Wenn Sie ein Arbeitsprofil auf einem Gerät erstellen möchten, auf dem bereits ein privates Profil vorhanden ist, müssen Sie zuerst prüfen, ob das Gerät ein Arbeitsprofil unterstützt. Suchen Sie dazu nach der Systemfunktion FEATURE_MANAGED_USERS:

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 einigen Dokumentationen ist verwaltetes Profil ein allgemeiner Begriff, der im Kontext von Android in Unternehmen dasselbe wie Arbeitsprofil bedeutet. Fügen Sie den Paketnamen des Geräteadministrators als Extra hinzu:

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 diese Intention so:

  • Prüft, ob das Gerät verschlüsselt ist. Wenn nicht, fordert das System den Nutzer auf, das Gerät zu verschlüsseln, bevor er fortfahren kann.
  • Erstellt ein Arbeitsprofil.
  • Entfernt nicht erforderliche Anwendungen aus dem Arbeitsprofil.
  • Kopiert die DPC-App in das Arbeitsprofil und legt den DPC selbst als Profilinhaber fest.

Überschreiben Sie onActivityResult(), um zu prüfen, 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-App auf. Überschreiben Sie diese Callback-Methode, um die Aktivierung des Arbeitsprofils abzuschließen.

Eine typische DeviceAdminReceiver.onProfileProvisioningComplete()-Callback-Implementierung führt Folgendes aus:

Arbeitsprofil aktivieren

Wenn Sie diese Aufgaben abgeschlossen haben, rufen Sie die Methode setProfileEnabled() des Geräte-Richtlinienmanagers 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-App wendet die von einem Administrator festgelegten Geräterichtlinien an, um die Anforderungen und Einschränkungen einer Organisation zu erfüllen. Beispielsweise kann in der Sicherheitsrichtlinie festgelegt 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 über die Device Administration API an.

Informationen zum Anwenden von Geräterichtlinien finden Sie unter Richtlinien.

Verwaltete Konfigurationen auf Arbeits-Apps anwenden

Mit verwalteten Konfigurationen können Sie Ihren Kunden die Möglichkeit geben, die Apps, die sie für die Bereitstellung genehmigt haben, vorzukonfigurieren und diese Apps einfach zu aktualisieren, wenn sich die Konfiguration ändern muss. Wenn Sie eine App vor der Bereitstellung konfigurieren, wird dafür gesorgt, dass die Sicherheits- und anderen 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 beiliegt. Weitere Informationen für App-Entwickler finden Sie unter Verwaltete Konfigurationen einrichten.

Sie rufen dieses Schema aus der App ab, um es den Administratoren Ihrer Kunden in Ihrer EMM-Konsole anzuzeigen. Außerdem stellen Sie eine Benutzeroberfläche bereit, in der die verschiedenen im Schema definierten Optionen angezeigt werden, und ermöglichen Administratoren, die Einstellungen der App vorzukonfigurieren. Die vom Administrator festgelegte verwaltete Konfiguration wird in der Regel auf dem EMM-Server gespeichert, der dann die Play EMM API verwendet, um Managedconfigurationsfordevice oder Managedconfigurationsforuser festzulegen. Weitere Informationen finden Sie unter Verwaltete Konfigurationen über Play.

Verwaltete Konfigurationen können auf die App angewendet werden, indem Sie die Play EMM API verwenden (empfohlene Methode) oder direkt über den DPC (siehe Verwaltete Konfigurationen direkt über den DPC anwenden). Die Verwendung der Play EMM API bietet mehrere Vorteile, darunter eine einfache Implementierung, da Sie die DPC Support Library verwenden können, um DPC-Aufgaben zu vereinfachen. Außerdem bietet die Play EMM API folgende Vorteile:

  • Legt die Konfiguration atomar fest, wenn eine neue App installiert wird. So ist die App bereit, wenn der Nutzer sie zum ersten Mal startet.
  • Sie können Konfigurationen nutzerbezogen verwalten und so die Bereitstellung nicht gerätebezogen überwachen.

Verwaltete Konfigurationen mit der Play EMM API anwenden

Wenn Sie die Play EMM API für verwaltete Konfigurationen verwenden möchten, muss der DPC Google Play das Festlegen von Konfigurationen erlauben. Die DPC Support Library übernimmt diese Aufgabe für Sie, indem sie die von Google Play gesendete Konfiguration weiterleitet.

Wenn Sie die Play EMM API verwenden möchten, laden Sie die DPC Support Library herunter und aktivieren Sie dann die Unterstützung für verwaltete Konfigurationen in Ihrem DPC.

Unterstützung für verwaltete Konfigurationen in Ihrem DPC aktivieren

Importieren Sie diesen Kurs 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 des 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 Geräteinhaber-DPC initialisiert ist, können Sie die Google Play EMM API in Ihrer EMM-Konsole und auf 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 Play.

Verwaltete Konfigurationen direkt über das DPC 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 des DPC, 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. Diese alternative Methode zum Anwenden verwalteter Konfigurationen wird jedoch nicht für Bereitstellungen mit Managed Google Play-Konten empfohlen.

Support für die Bereitstellung von Managed Google Play-Konten

Die DPC Support Library bietet Unterstützung für die Bereitstellung von Managed Google Play-Konten. Um diese Unterstützung nutzen zu können, müssen Sie zuerst die Bibliothek initialisieren. Anschließend können Sie die Arbeitsumgebung einrichten und ein Managed Google Play-Konto hinzufügen.

Unterstützung für Managed Google Play-Konten in Ihrem DPC initialisieren

Importieren Sie diesen Kurs in Ihren DPC:

com.google.android.apps.work.dpcsupport.AndroidForWorkAccountSupport

Initialisieren Sie die Bibliothek für die Bereitstellungskompatibilität. In diesem Beispiel ist „admin“ der ComponentName des DeviceAdminReceiver.

Kotlin

var androidForWorkAccountSupport = AndroidForWorkAccountSupport(context, admin)

Java

AndroidForWorkAccountSupport androidForWorkAccountSupport =
    new AndroidForWorkAccountSupport(context, admin);

Arbeitsumgebung für verwaltete Google Play-Konten einrichten

Nachdem der DPC ein Gerät im Modus „Profilinhaber“ (ACTION_PROVISION_MANAGED_PROFILE) oder „Geräteinhaber“ (ACTION_PROVISION_MANAGED_DEVICE) bereitgestellt hat, prüfen Sie, ob das Gerät verwaltete Google Play-Konten unterstützt, indem Sie Folgendes aufrufen:

Kotlin

androidForWorkAccountSupport.ensureWorkingEnvironment(callback)

Java

androidForWorkAccountSupport.ensureWorkingEnvironment(callback);

Der Callback meldet den Erfolg oder Misserfolg dieses Vorgangs. Wenn der Callback erfolgreich zurückgegeben wird, kann ein Managed Google Play-Konto hinzugefügt werden. Wenn im Callback ein Fehler gemeldet wird, fordere den Nutzer auf, zu prüfen, ob das Gerät eine Netzwerkverbindung hat (z. B. wenn der Download fehlschlägt). In anderen Fällen melden Sie den Fehler Google.

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 der AccountManager des Android-Frameworks kann einem Gerät ein Managed Google Play-Konto hinzugefügt werden. Um die Interaktion mit AccountManager zu vereinfachen, verwenden Sie die Hilfsfunktion (siehe Beispiel unten) aus der DPC Support Library. Die Funktion verarbeitet das vom Google Play-Server zurückgegebene Token und ermöglicht die Bereitstellung des Managed Google Play-Kontos. Die Funktion wird zurückgegeben, wenn sich das Managed Google Play-Konto in einem gültigen Status befindet:

Kotlin

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback)

Java

androidForWorkAccountSupport.addAndroidForWorkAccount(token, accountAddedCallback);
  • token— Das Nutzerauthentifizierungstoken, das vom Users.generateAuthenticationToken()-Aufruf der Google Play EMM API generiert wird.
  • accountAddedCallback: Gibt das verwaltete 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 Geräteverwaltung.
  • Informationen zu Android Enterprise-Bereitstellungsmethoden finden Sie im Entwicklerleitfaden 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 für andere Apps als Profilinhaber festgelegt werden, finden Sie unter AppRestrictionEnforcer.