Für Android Enterprise-Registrierungen gibt es zwei primäre Arten von Nutzeridentitäten: Managed Google Play-Konten und verwaltete Google-Konten. Managed Google Play-Konten sind geräteorientiert und nicht an die Google-Identität eines bestimmten Nutzers gebunden. Verwaltete Google-Konten sind hingegen mit der geschäftlichen Google-Identität eines Nutzers verknüpft, was die Nutzerfreundlichkeit verbessert, da die Nutzer auf ihren Geräten angemeldet bleiben.
Managed Google Play-Konten waren früher der Standard. Google empfiehlt jedoch jetzt, für alle neuen Entwicklungen den verbesserten Registrierungsvorgang zu verwenden, bei dem standardmäßig verwaltete Google-Konten erstellt werden.
Eine Anleitung für die ältere Implementierung finden Sie am Ende dieses Dokuments. Alle neuen Entwicklungen sollten jedoch dem hier beschriebenen neuen Registrierungsvorgang folgen.
Übersicht
Der verbesserte Geräte-Registrierungsvorgang optimiert die Geräteeinrichtung durch die Verwendung mehrerer neuer Komponenten und ändert die Implementierung von benutzerdefinierten Device Policy Controllern (DPCs). Dieser neue Ansatz erfordert, dass benutzerdefinierte DPC-Lösungen in das Android Management API (AMAPI) SDK und Android Device Policy integriert werden, um Funktionen zur Gerätevorbereitung und Nutzerregistrierung auszuführen.
Das AMAPI SDK bietet die erforderlichen APIs für die Interaktion mit Android Device Policy auf dem Gerät selbst. Auf der Serverseite verwenden Enterprise Mobility Management (EMM)-Lösungen die Play EMM API, um die Registrierungstokens zu generieren, die zum Starten des Geräte-Registrierungsvorgangs erforderlich sind.
Die Android Device Policy App spielt jetzt eine zentrale Rolle bei der Verarbeitung von Vorgängen auf dem Gerät. Das AMAPI SDK wird verwendet, um die Installation und die erforderlichen Updates auf dem Gerät zu verwalten. Android Device Policy übernimmt auch den Nutzerauthentifizierungsvorgang, verarbeitet die Nutzerauthentifizierung direkt und stellt dem EMM die Identität des Nutzers zur Verfügung. Wenn Google den Nutzer aus irgendeinem Grund nicht authentifizieren kann, wird als Fallback ein neues Managed Google Play-Konto erstellt und dem Gerät hinzugefügt.
Ein wichtiger Bestandteil dieses neuen Registrierungsvorgangs ist die Verwaltung des Gerätezugriffs auf Google-Dienste. Standardmäßig befinden sich Geräte in einem eingeschränkten Zustand. Der EMM spielt eine entscheidende Rolle bei der Aktivierung des Zugriffs, sobald das Gerät konform ist.
API-Integration
Prüfen Sie vor dem Start, ob Sie die neueste Version des Play EMM API-Clients und des AMAPI SDK verwenden.
Implementierungsleitfaden für die Registrierung
In diesem Leitfaden werden die erforderlichen Schritte zur Implementierung der Registrierung beschrieben. Dazu gehören die Vorbereitung der Umgebung, der Umgang mit verschiedenen Registrierungsmethoden und die Verwaltung des Gerätelebenszyklus.
Umgebung vorbereiten
Bevor Sie mit der Kontoeinrichtung beginnen, müssen Sie die Geräteumgebung vorbereiten. Dazu gehört, den Play Store auf die neueste Version zu aktualisieren und Android Device Policy (com.google.android.apps.work.clouddpc) im Hintergrund auf dem Gerät zu installieren. Die Installation von Android Device Policy ist unerlässlich, da sie wichtige Komponenten des Kontoeinrichtungsvorgangs enthält. EMMs müssen die Umgebung nicht manuell vorbereiten. Stattdessen sollten sie
die
EnvironmentClient verwenden, wie unter und beschrieben, und sich an die bereitgestellten Codebeispiele halten.
Beispielcode
Bevor die AccountSetup API verwendet werden kann, um das Arbeitskonto auf dem Gerät hinzuzufügen, muss der DPC zuerst prüfen, ob die Geräteumgebung bereit ist.
Verwenden Sie
EnvironmentClientFactory, um einEnvironmentClientzu instanziieren, und rufen SieprepareEnvironmentoderprepareEnvironmentAsyncauf.val notificationReceiverServiceName = ComponentName(context, NotificationReceiver::class.java) // An EMM should implement android.app.admin.DeviceAdminReceiver and use that // class to instantiate a ComponentName val admin = ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java) EnvironmentClientFactory.create(context) .prepareEnvironment( PrepareEnvironmentRequest.builder() .setRoles( listOf( Role.builder().setRoleType( Role.RoleType.DEVICE_POLICY_CONTROLLER ).build() ) ) .setAdmin(admin) .build(), notificationReceiverServiceName, ) [Proceed with AccountSetup]
Dieser Vorgang kann mehrere Sekunden oder Minuten dauern, da Anwendungen möglicherweise installiert oder aktualisiert werden, um eine ordnungsgemäße Arbeitsumgebung zu gewährleisten. Google empfiehlt, diesen Vorgang so früh wie möglich im Hintergrund zu starten und eine entsprechende Benutzeroberfläche anzuzeigen, während der Nutzer wartet. Nach Abschluss des Vorgangs ist das Gerät bereit, damit der DPC die AccountSetup API verwenden kann.
Registrierungsvorgang
EMMs müssen die Verwendung von users.generateAuthenticationToken() und users.insert() für alle Geräte einstellen. Stattdessen müssen EMMs die API
auf dem Gerät
aufrufen, um die Endnutzerauthentifizierung durchzuführen. Die neue API gibt die userId und email an den DPC zurück. Wenn Google den Nutzer nicht authentifizieren kann, wird ein Managed Google Play-Konto erstellt und dem Gerät hinzugefügt. In diesem Fall gibt Google die userId dieses Kontos zurück.
Google führt jetzt die Verwendung von Registrierungstokens ein, die an die Authentifizierungs-API übergeben werden müssen. EMMs legen fest, wann und wie das Token erstellt wird. Es kann Teil einer vorhandenen Registrierungsnutzlast sein (z. B. ein QR-Code oder eine Zero-Touch-Konfiguration).
Google empfiehlt jedoch, das Token bei Bedarf zu erstellen und die vorhandene API für Managed Google Play-Konten durch die neue API zu ersetzen, um die Änderung zu minimieren.
Der verbesserte benutzerdefinierte DPC-Registrierungsvorgang umfasst die folgenden Schritte:
Wichtiger anfänglicher Gerätestatus:Wenn Sie ein Gerät mit einem benutzerdefinierten DPC registrieren, befindet sich das dem Gerät hinzugefügte Google-Konto im Status deaktiviert. Das bedeutet, dass der Zugriff auf Google-Dienste, einschließlich Google Play, zunächst eingeschränkt ist.
Dieser Standardstatus „deaktiviert“ und die anschließende Anforderung, dass der EMM das Gerät als konform kennzeichnen muss (z.B. durch Aufrufen von Devices.SetState), gelten speziell unter den folgenden Bedingungen:
- Die Organisation hat die Inhaberschaft ihrer Domain bei Google bestätigt.
- Der IT-Administrator hat die Android-Mobilgeräteverwaltung durch Dritte für die spezifische Organisationseinheit (OE) des Nutzers in der Admin-Konsole explizit aktiviert.
- Registrierungstoken erstellen:Der EMM erstellt ein Registrierungstoken mit der Play EMM API.
- Umgebung vorbereiten: Der benutzerdefinierte DPC verwendet den Vorgang Umgebung vorbereiten , um zu prüfen, ob das Gerät für die Registrierung bereit ist.
- Registrierung starten: Der benutzerdefinierte DPC ruft die
startAccountSetupAPI im AMAPI SDK auf und übergibt das Registrierungstoken. Hinweis: Der DPC muss entweder Geräteinhaber oder Profilinhaber sein, bevor er diese API aufruft. - Google-Authentifizierungsaktivität starten:Falls erforderlich, ruft der benutzerdefinierte DPC
die
launchAuthenticationActivityAPI im AMAPI SDK auf und übergibt denAccountSetupAttempt. Dadurch wird eine Google-Authentifizierungsaktivität gestartet, die den Nutzer nach erfolgreicher Authentifizierung zum benutzerdefinierten DPC zurückführt. Der Nutzer kann diesen Vorgang auch überspringen. In diesem Fall wird dem Gerät ein Managed Google Play-Konto hinzugefügt. Diese Option kann mitgoogleAuthenticationOptionskonfiguriert werden. - Registrierung abschließen:Das AMAPI SDK benachrichtigt den benutzerdefinierten DPC über das Ergebnis der Registrierung.
Google-Dienste aktivieren: Sobald der benutzerdefinierte DPC das Gerät vollständig bereitgestellt und bestätigt hat, dass es allen Unternehmensrichtlinien entspricht, muss der EMM-Server
Devices.setState()aufrufen und den ParameteraccountStateauf"enabled"setzen.- Warum ist das wichtig? Mit diesem API-Aufruf wird das Gerät als konform gekennzeichnet.
- Folgen, wenn der Aufruf nicht erfolgt:Ohne diesen
Devices.setState(setStateRequest)-Aufruf bleibt das Konto im Status „deaktiviert“. Der Nutzer kann nicht auf Google Play zugreifen (um Apps zu installieren oder zu aktualisieren) und auch nicht auf andere Google-Dienste, für die eine Kontoauthentifizierung erforderlich ist.
Gerätestatus und Dienstzugriff verwalten
Nach der ersten Registrierung ist der EMM dafür verantwortlich, den Zugriff des Geräts auf Google-Dienste basierend auf dem Compliance-Status aufrechtzuerhalten.
Dienstunterbrechungen verarbeiten: BAD_DEVICE_MANAGEMENT
Wenn der Zugriff eines Geräts auf Google-Dienste blockiert ist, senden die Google Play-Dienste (GMSCore) einen Intent mit der Aktion com.google.android.gms.auth.BAD_DEVICE_MANAGEMENT. Dafür kann es verschiedene Gründe geben:
- Der EMM hat nach der ersten Geräteregistrierung nie Devices.setState("enabled") aufgerufen.
- Das Gerät entspricht nicht mehr den EMM-Richtlinien und der EMM hat es noch nicht wieder aktiviert.
- Der EMM hat den Gerätestatus explizit auf „deaktiviert“ gesetzt, indem er Devices.setState() aufgerufen und accountState auf „deaktiviert“ gesetzt hat. Das kann aus Sicherheitsgründen, aufgrund administrativer Maßnahmen oder aus anderen Gründen geschehen.
Dieser Intent enthält einen Statuscode wie "ThirdPartyDeviceManagementRequired".
Benutzerdefinierte DPCs MÜSSEN einen BroadcastReceiver implementieren, um auf diesen BAD_DEVICE_MANAGEMENT Intent zu warten.
Nach Erhalt dieser Broadcast-Nachricht sollte der DPC Folgendes tun:
- Compliance neu bewerten:Prüfen Sie, ob das Gerät derzeit alle vom EMM festgelegten Richtlinien erfüllt.
- Maßnahmen ergreifen:
- Konform:Der DPC sollte den EMM-Server benachrichtigen. Der EMM-Server sollte dann
Devices.setState()aufrufen undaccountStatefür die spezifische Nutzer-ID und Geräte-ID auf"enabled"setzen, um den Dienstzugriff wiederherzustellen. - Nicht konform:Sobald die Probleme behoben sind und das Gerät konform ist, sollte der EMM
Devices.setState()aufrufen.
- Konform:Der DPC sollte den EMM-Server benachrichtigen. Der EMM-Server sollte dann
Dieser Mechanismus sorgt dafür, dass Situationen erkannt und behoben werden können, in denen ein Gerät den Zugriff auf Google-Dienste verliert.
Überlegungen zur Unternehmensübernahme
Es kann zu Änderungen am Kontotyp der Organisation kommen (z.B. von ManagedGoogleDomainType.TYPE_TEAM zu ManagedGoogleDomainType.TYPE_DOMAIN). Obwohl dieser Vorgang in der Regel die EMM-Bindung nicht unterbricht, kann er manchmal den Zugriff auf Google-Dienste auf Geräten stören.
EMMs sollten wissen, dass wenn Nutzer nach einem bekannten Übernahmeereignis Probleme mit dem Dienstzugriff melden, auch wenn das Gerät den EMM-Richtlinien entspricht, ein Aufruf von Devices.setState() erforderlich sein kann, um den Gerätestatus unter der neuen Kundenstruktur mit den Back-Ends von Google zu synchronisieren. Proaktive Aufrufe für alle Geräte nach der Übernahme sind in der Regel nicht erforderlich, aber sie sind ein wichtiges Tool zur Behebung von Zugriffsproblemen.
Kontoeinrichtung – Beispielcode
Um einen Kontoeinrichtungsversuch zu starten, kann die aufrufende App
AccountSetupClientverwenden und entweder diestartAccountSetup()oderstartAccountSetupFuture()Methode aufrufen. Ein Beispiel für die Implementierung finden Sie im folgenden Codebeispiel:// Create AccountSetupClient val client = AccountSetupClientFactory.create( this, activityResultRegistry ) lifecycle.addObserver(client.lifecycleObserver) // Create adminComponent val notificationReceiver = ComponentName(this, AccountSetupNotificationReceiver::class.java) // Helper method to get enrollment token created with Play EMM API val enrollmentToken = getEnrollmentToken() val request = StartAccountSetupRequest.builder() .setEnrollmentToken(enteredText) .setNotificationReceiverServiceComponentName(notificationReceiver) .setAdminComponentName( ComponentName(this, com.example.dpc.DeviceAdminReceiver::class.java)) .build() try { val accountSetupAttempt = client.startAccountSetup(request) // handle attempt } catch (e: Exception) { // handle exception }Implementieren Sie die
AccountSetupListener-Schnittstelle und geben Sie eine Implementierung für die Verarbeitung der empfangenen Statusaktualisierungen an.Erweitern Sie
NotificationReceiverServiceund geben Sie dieAccountSetupListenerInstanz an, die in Schritt 2 erstellt wurde, indem SiegetAccountSetupListener()überschreiben.// Handles account setup changes class AccountSetupNotificationReceiver : NotificationReceiverService(), AccountSetupListener { override fun getAccountSetupListener(): AccountSetupListener = this override fun onAccountSetupChanged(accountSetupAttempt: AccountSetupAttempt) { when (accountSetupAttempt.state.kind) { StateCase.ADDED_ACCOUNT -> { val enterpriseAccount = state.addedAccount() val userId = enterpriseAccount.userId val deviceId = enterpriseAccount.deviceId // Handle account added state. // IMPORTANT: The device/account is now added but *DISABLED* // for Google services. Your EMM backend MUST be notified to // perform policy compliance checks and then call Devices.setState() // to activate Google Play and other services. } StateCase.AUTHENTICATION_ACTIVITY_LAUNCH_REQUIRED -> { val request = LaunchAuthenticationActivityRequest.builder() .setAccountSetupAttempt(accountSetupAttempt) .build(); // Send the attempt to the foreground activity to call: accountSetupClient.launchAuthenticationActivity(request) } StateCase.ACCOUNT_SETUP_ERROR -> { // Handle error state. val failureReason = state.accountSetupError().failureReason } else -> { // Handle unknown account setup attempt state. } } } }Fügen Sie die erweiterte
NotificationReceiverService-Klasse zuAndroidManifest.xmlhinzu und prüfen Sie, ob sie exportiert wird.<application> <service android:name = ".accountsetup.AccountSetupNotificationReceiver" android:exported = "true" /> </application>Wenn Ihre App auf SDK 30 oder höher ausgerichtet ist, ist in
AndroidManifest.xmlein queries-Element erforderlich, um anzugeben, dass sie mit ADP interagiert.<queries> <package android:name="com.google.android.apps.work.clouddpc" /> </queries>
Testanleitung
In diesem Abschnitt finden Sie eine Reihe von Richtlinien und Best Practices zum Testen Ihrer Implementierung.
PrepareEnvironment testen
Aktuellen Status des Geräts abrufen:Der EMM führt
adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionNameaus, um die Version von Android Device Policy auf dem Gerät abzurufen. Wenn Android Device Policy nicht installiert ist, wird eine leere Ausgabe erwartet.
PrepareEnvironment integrieren:Der benutzerdefinierte DPC ruft die
prepareEnvironmentAPI im AMAPI SDK auf und übergibt die korrekte Anfrage.Auf das Ergebnis von PrepareEnvironment warten:Der benutzerdefinierte DPC wartet, bis
prepareEnvironmentabgeschlossen ist.Erfolg von PrepareEnvironment bestätigen:Nach Abschluss führt der EMM erneut
adb shell dumpsys package com.google.android.apps.work.clouddpc | grep versionNameaus. Die Android Device Policy-Version sollte jetzt höher sein als in Schritt 1.
Google-Kontoauthentifizierung testen
- Testunternehmen erstellen: Der EMM erstellt ein Google-Testunternehmen für eine Testdomain,
das mit einem EMM-Test verknüpft ist, mit
enterprises.generateSignupUrl. - Google-Authentifizierung aktivieren: Der EMM aktiviert die Google-Authentifizierung für das Testunternehmen. Folgen Sie dazu dieser Anleitung in der Admin-Konsole.
- Registrierungstoken erstellen:Der EMM erstellt mit der Play EMM API ein Registrierungstoken vom Typ userDevice.
- Registrierung starten: Der benutzerdefinierte DPC ruft die
startAccountSetupAPI im AMAPI SDK auf und übergibt das Registrierungstoken. - Aktivität erforderlich:Das AMAPI SDK benachrichtigt den benutzerdefinierten DPC, dass eine Aktivität gestartet werden muss, um den Nutzer zu authentifizieren.
- Nutzer authentifizieren: Der benutzerdefinierte DPC ruft
launchAuthenticationActivityauf, um die Aktivität zu starten. Der Nutzer authentifiziert sich mit einem verwalteten Google-Konto (Teil des in Schritt 1 erstellten Unternehmens). - Registrierung abschließen:Das AMAPI SDK benachrichtigt den benutzerdefinierten DPC über das Ergebnis der Registrierung.
Überspringen der Google-Authentifizierung testen
Wir verwenden die zuvor beschriebene Einrichtung.
In Schritt 7 drückt der Nutzer dieses Mal auf Überspringen , anstatt sich mit seinem Google-Konto zu authentifizieren. Die Registrierung wird erfolgreich abgeschlossen, mit einem Dienst
konto auf dem Gerät (d.h. der
AuthenticationType
ist „Anonym“).
Geräte ohne Nutzerkonto testen
Der verbesserte benutzerdefinierte DPC-Registrierungsvorgang umfasst die folgenden Schritte, wenn die Google-Authentifizierung deaktiviert ist:
- Testunternehmen erstellen:Das kann dasselbe Unternehmen sein, das zuvor erstellt wurde.
- Registrierungstoken erstellen:Der EMM erstellt mit der Play EMM API ein Registrierungstoken vom Typ userlessDevice.
- Registrierung starten: Der benutzerdefinierte DPC ruft die
startAccountSetupAPI im AMAPI SDK auf und übergibt das Registrierungstoken. - Registrierung abschließen:Das AMAPI SDK benachrichtigt den benutzerdefinierten DPC über das Ergebnis der Registrierung.