Integrationsleitfaden für EMM

Dieser Leitfaden hilft Anbietern von Enterprise Mobility Management (EMM), die Zero-Touch-Registrierung in ihre Konsole zu integrieren. Lesen Sie weiter, um mehr über die Registrierung zu erfahren und Best Practices zu erhalten, die Ihnen helfen, Geräte mit Ihrem DPC (Device Policy Controller) bereitzustellen. Wenn Sie einen DPC haben, erhalten Sie Best Practices für die Bereitstellung von Geräten sowie Ratschläge für die Entwicklung und das Testen.

Funktionen für IT-Administratoren

Mit der Kunden-API können IT-Administratoren die Zero-Touch-Registrierung direkt über Ihre Konsole einrichten. Hier sind einige Aufgaben, die ein IT-Administrator in Ihrer Konsole ausführen kann:

  • Sie können Zero-Touch-Registrierungskonfigurationen basierend auf Ihren mobilen Richtlinien erstellen, bearbeiten und löschen.
  • Legen Sie eine Standardkonfiguration fest, damit Ihr DPC zukünftige Geräte bereitstellt, die die Organisation kauft.
  • Einzelne Konfigurationen auf Geräte anwenden oder Geräte aus der Zero-Touch-Registrierung entfernen

Weitere Informationen zur Zero-Touch-Registrierung finden Sie in der Übersicht.

Vorbereitung

Bevor Sie die Zero-Touch-Registrierung in Ihre EMM-Konsole einfügen, prüfen Sie, ob Ihre Lösung Folgendes unterstützt:

  • Ihre EMM-Lösung muss ein unternehmenseigenes Android-Gerät mit Android 8.0 oder höher (Pixel 7.1 oder höher) im vollständig verwalteten Modus bereitstellen. Unternehmenseigene Geräte mit Android 10 oder höher können als vollständig verwaltet oder mit einem Arbeitsprofil bereitgestellt werden.
  • Da bei der Zero-Touch-Registrierung automatisch ein DPC heruntergeladen und installiert wird, muss Ihr DPC bei Google Play verfügbar sein. Wir führen eine Liste kompatibler DPCs, die IT-Administratoren über die Kunden-API oder das Portal konfigurieren können. Senden Sie über die EMM Provider Community eine Anfrage zur Produktänderung, um Ihren DPC der Liste hinzuzufügen.
  • Ihre Kunden benötigen ein Konto mit Zero-Touch-Registrierung, um die Kunden-API aufzurufen. Ein Partner-Reseller richtet das Konto für die Organisation eines IT-Administrators ein, wenn die Organisation ihre Geräte kauft.
  • Das Gerät muss mit den Google Mobile-Diensten (GMD) kompatibel sein und die Google Play-Dienste müssen jederzeit aktiviert sein, damit die Zero-Touch-Registrierung richtig funktioniert.

API aufrufen

Die Nutzer Ihrer Konsole autorisieren Ihre API-Anfragen an die Kunden-API mit ihrem Google-Konto. Dieser Ablauf unterscheidet sich von der Autorisierung, die Sie für andere EMM-APIs durchführen. Weitere Informationen dazu, wie Sie das in Ihrer App umsetzen, finden Sie unter Autorisierung.

Nutzungsbedingungen für Aliasse

Ihre Nutzer müssen die aktuellen Nutzungsbedingungen akzeptieren, bevor sie die API aufrufen. Wenn der API-Aufruf den HTTP-Statuscode 403 Forbidden zurückgibt und der Antworttext ein TosError enthält, fordern Sie den Nutzer auf, die Nutzungsbedingungen zu akzeptieren, indem er sich im Zero-Touch-Registrierungsportal anmeldet. Im folgenden Beispiel sehen Sie eine der Möglichkeiten, wie Sie das tun können:

Java

// Authorize this method call as a user that hasn't yet accepted the ToS.
final String googleApiFormatHttpHeader = "X-GOOG-API-FORMAT-VERSION";
final String googleApiFormatVersion = "2";
final String tosErrorType =
      "type.googleapis.com/google.android.device.provisioning.v1.TosError";

try {
  // Send an API request to list all the DPCs available including the HTTP header
  // X-GOOG-API-FORMAT-VERSION with the value 2. Import the  exception:
  // from googleapiclient.errors import HttpError
  AndroidProvisioningPartner.Customers.Dpcs.List request =
        service.customers().dpcs().list(customerAccount);
  request.getRequestHeaders().put(googleApiFormatHttpHeader, googleApiFormatVersion);
  CustomerListDpcsResponse response = request.execute();
  return response.getDpcs();

} catch (GoogleJsonResponseException e) {
  // Get the error details. In your app, check details exists first.
  ArrayList<Map> details = (ArrayList<Map>) e.getDetails().get("details");
  for (Map detail : details) {
    if (detail.get("@type").equals(tosErrorType)
          && (boolean) detail.get("latestTosAccepted") != true) {
      // Ask the user to accept the ToS. If they agree, open the portal in a browser.
      // ...
    }
  }
  return null;
}

.NET

// Authorize this method call as a user that hasn't yet accepted the ToS.
try
{
    var request = service.Customers.Dpcs.List(customerAccount);
    CustomerListDpcsResponse response = request.Execute();
    return response.Dpcs;
}
catch (GoogleApiException e)
{
    foreach (SingleError error in e.Error?.Errors)
    {
        if (error.Message.StartsWith("The user must agree the terms of service"))
        {
            // Ask the user to accept the ToS. If they agree, open the portal in a browser.
            // ...
        }
    }
}

Python

# Authorize this method call as a user that hasn't yet accepted the ToS.
tos_error_type = ('type.googleapis.com/'
                  'google.android.device.provisioning.v1.TosError')
portal_url = 'https://enterprise.google.com/android/zero-touch/customers'

# Send an API request to list all the DPCs available including the HTTP
# header X-GOOG-API-FORMAT-VERSION with the value 2. Import the exception:
# from googleapiclient.errors import HttpError
try:
  request = service.customers().dpcs().list(parent=customer_account)
  request.headers['X-GOOG-API-FORMAT-VERSION'] = '2'
  response = request.execute()
  return response['dpcs']

except HttpError as err:
  # Parse the JSON content of the error. In your app, check ToS exists first.
  error = json.loads(err.content)
  tos_error = error['error']['details'][0]

  # Ask the user to accept the ToS (not shown here). If they agree, then open
  # the portal in a browser.
  if (tos_error['@type'] == tos_error_type
      and tos_error['latestTosAccepted'] is not True):
    if raw_input('Accept the ToS in the zero-touch portal? y|n ') == 'y':
      webbrowser.open(portal_url)

Wenn Ihr Google API-Client detaillierte Fehler unterstützt (Java, Python oder HTTP-Anfragen), fügen Sie den HTTP-Header X-GOOG-API-FORMAT-VERSION mit dem Wert 2 in Ihre Anfragen ein. Wenn Ihr Client keine detaillierten Fehler unterstützt (.NET und andere), gleichen Sie die Fehlermeldung ab.

Wenn wir die Nutzungsbedingungen in Zukunft aktualisieren, wird der Nutzer bei diesem Ansatz in Ihrer App aufgefordert, den neuen Nutzungsbedingungen noch einmal zuzustimmen.

IT-Administratoren verwenden das Zero-Touch-Registrierungsportal, um die Nutzer für ihre Organisation zu verwalten. Das ist über die Kunden-API nicht möglich. IT‑Administratoren können Geräte und Konfigurationen auch über das Portal verwalten. Wenn Sie in Ihrer Konsole oder in Ihrer Dokumentation auf das Portal verweisen müssen, verwenden Sie diese URL:

https://enterprise.google.com/android/zero-touch/customers

Informieren Sie IT-Administratoren, dass sie aufgefordert werden, sich mit ihrem Google-Konto anzumelden.

Geräteregistrierung

Die Zero-Touch-Registrierung ist ein Mechanismus zum Registrieren von Geräten und ähnelt der NFC-Registrierung oder der Registrierung per QR-Code. Ihre Konsole muss verwaltete Geräte unterstützen und Ihr DPC muss im Modus für vollständig verwaltete Geräte ausgeführt werden können.

Die Zero-Touch-Registrierung ist auf unterstützten Geräten mit Android 8.0 oder höher verfügbar. IT-Administratoren müssen unterstützte Geräte bei einem Partner-Reseller erwerben. In Ihrer Konsole kann nachverfolgt werden, welche Geräte des IT-Administrators für die Zero-Touch-Registrierung verfügbar sind. Rufen Sie dazu customers.devices.list auf.

So funktioniert die Registrierung:

  1. Ein Gerät verbindet sich beim ersten Start (oder nach dem Zurücksetzen auf die Werkseinstellungen) mit einem Google-Server, um die Zero-Touch-Registrierung durchzuführen.
  2. Wenn der IT-Administrator eine Konfiguration auf das Gerät angewendet hat, wird beim Zero-Touch-Enrollment der Android-Einrichtungsassistent für vollständig verwaltete Geräte ausgeführt und die Bildschirme werden mit Metadaten aus der Konfiguration personalisiert.
  3. Bei der Zero‑Touch-Registrierung wird Ihr DPC aus Google Play heruntergeladen und installiert.
  4. Ihr Geräteinhaberprofil-Controller empfängt die Intent ACTION_PROVISION_MANAGED_DEVICE und stellt das Gerät bereit.

Wenn keine Internetverbindung besteht, wird die Prüfung durchgeführt, sobald eine Verbindung verfügbar ist. Weitere Informationen zur Gerätebereitstellung mit der Zero-Touch-Registrierung finden Sie unten unter Bereitstellung.

Standardkonfigurationen

Die Zero-Touch-Registrierung ist für IT-Administratoren vor allem dann nützlich, wenn sie eine Standardkonfiguration festlegen, die auf alle neuen Geräte angewendet wird, die ihre Organisation kauft. Sie werden aufgefordert, eine Standardkonfiguration über die Konsole festzulegen, wenn noch keine festgelegt ist. Sie können den Wert von customers.configurations.isDefault prüfen, um herauszufinden, ob eine Organisation eine Standardkonfiguration festgelegt hat.

Im folgenden Beispiel wird gezeigt, wie Sie eine vorhandene Konfiguration zur Standardkonfiguration machen können:

Java

// Send minimal data with the request. Just the 2 required fields.
// targetConfiguration is an existing configuration that we want to make the default.
Configuration configuration = new Configuration();
configuration.setIsDefault(true);
configuration.setConfigurationId(targetConfiguration.getConfigurationId());

// Call the API, including the FieldMask to avoid setting other fields to null.
AndroidProvisioningPartner.Customers.Configurations.Patch request = service
      .customers()
      .configurations()
      .patch(targetConfiguration.getName(), configuration);
request.setUpdateMask("isDefault");
Configuration results = request.execute();

.NET

// Send minimal data with the request. Just the 2 required fields.
// targetConfiguration is an existing configuration that we want to make the default.
Configuration configuration = new Configuration
{
    IsDefault = true,
    ConfigurationId = targetConfiguration.ConfigurationId,
};

// Call the API, including the FieldMask to avoid setting other fields to null.
var request = service.Customers.Configurations.Patch(configuration,
                                                     targetConfiguration.Name);
request.UpdateMask = "IsDefault";
Configuration results = request.Execute();

Python

# Send minimal data with the request. Just the 2 required fields.
# target_configuration is an existing configuration we'll make the default.
configuration = {
    'isDefault': True,
    'configurationId': target_configuration['configurationId']}

# Call the API, including the FieldMask to avoid setting other fields to null.
response = service.customers().configurations().patch(
    name=target_configuration['name'],
    body=configuration, updateMask='isDefault').execute()

Auf Ihren DPC verweisen

Wir empfehlen, den API-Ressourcennamen customers.dpcs.name zu verwenden, um Ihren DPC zu identifizieren und in Konfigurationen zu verwenden. Der Ressourcenname enthält eine eindeutige und unveränderliche Kennung für den DPC. Rufen Sie customers.dpcs.list auf, um die Liste aller unterstützten DPCs abzurufen. Da der Ressourcenname auch die Kunden-ID enthält, filtern Sie die Liste mit der letzten Pfadkomponente, um eine passende Dpc-Instanz zu finden. Das folgende Beispiel zeigt, wie Sie Ihren DPC abgleichen und für die spätere Verwendung in einer Konfiguration beibehalten:

Java

// Return a customer Dpc instance for the specified DPC ID.
String myDpcIdentifier = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...xMSWCiYiuHRWeBbu86Yjq";
final int dpcIdIndex = 3;
final String dpcComponentSeparator = "/";
// ...
for (Dpc dpcApp : dpcs) {
    // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the
    // fourth component matches the DPC ID.
    String dpcId = dpcApp.getName().split(dpcComponentSeparator)[dpcIdIndex];
    if (dpcId.equals(myDpcIdentifier)) {
        System.out.format("My DPC is: %s\n", dpcApp.getDpcName());
        return dpcApp;
    }
}
// Handle the case when the DPC isn't found...

.NET

// Return a customer Dpc instance for the specified DPC ID.
var myDpcIdentifer = "AH6Gbe4aiS459wlz58L30cqbbXbUa_JR9...fE9WdHcxMSWCiYiuHRWeBbu86Yjq";
const int dpcIdIndex = 3;
const String dpcComponentSeparator = "/";
// ...
foreach (Dpc dpcApp in dpcs)
{
    // Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID}, check the
    // fourth component matches the DPC ID.
    String dpcId = dpcApp.Name.Split(dpcComponentSeparator)[dpcIdIndex];
    if (dpcId.Equals(myDpcIdentifer))
    {
        Console.WriteLine("Matched DPC is: {0}", dpcApp.DpcName);
        return dpcApp;
    }
}
// Handle the case when the DPC isn't found...

Python

# Return a customer Dpc instance for the specified DPC ID.
my_dpc_id = 'AH6Gbe4aiS459wlz58L30cqb...fE9WdHcxMSWCiYiuHRWeBbu86Yjq'
# ...
for dpc_app in dpcs:
  # Because the DPC name is in the format customers/{CUST_ID}/dpcs/{DPC_ID},
  # check the fourth component matches the DPC ID.
  dpc_id = dpc_app['name'].split('/')[3]
  if dpc_id == my_dpc_id:
    return dpc_app

# Handle the case when the DPC isn't found...

Wenn Sie den Namen eines DPC in der Benutzeroberfläche Ihrer Konsole anzeigen müssen, verwenden Sie den Wert, der von customers.dpcs.dpcName zurückgegeben wird.

Wird bereitgestellt

Nutzen Sie die Gelegenheit, eine hervorragende Nutzererfahrung bei der Gerätebereitstellung zu bieten. Für die Bereitstellung des Geräts sind nur ein Nutzername und ein Passwort erforderlich. Reseller können Geräte direkt an Remote-Nutzer senden. Alle anderen Einstellungen, z. B. EMM-Server oder Organisationseinheit, müssen in customers.configuration.dpcExtras enthalten sein.

Das folgende JSON-Snippet zeigt einen Teil einer Beispielkonfiguration:

{
  "android.app.extra.PROVISIONING_LOCALE": "en_GB",
  "android.app.extra.PROVISIONING_TIME_ZONE": "Europe/London",
  "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED": true,
  "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE": {
    "workflow_type": 3,
    "default_password_quality": 327680,
    "default_min_password_length": 6,
    "company_name": "XYZ Corp",
    "organizational_unit": "sales-uk",
    "management_server": "emm.example.com",
    "detail_tos_url": "https://www.example.com/policies/terms/",
    "allowed_user_domains": "[\"example.com\", \"example.org\", \"example.net\"]"
    }
}

Bei der Zero-Touch-Registrierung wird Ihr DPC mithilfe eines Android-Intents installiert und gestartet. Das System sendet die Werte in der JSON-Eigenschaft android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE als Extras im Intent an Ihren Geräteinhaber. Ihr DPC kann die Bereitstellungseinstellungen aus PersistableBundle mit denselben Schlüsseln lesen.

Empfohlen: Verwenden Sie die folgenden Intent-Extras, um Ihren DPC einzurichten:

Nicht empfohlen: Die folgenden Extras, die Sie möglicherweise bei anderen Registrierungsmethoden verwenden, sollten nicht enthalten sein:

Informationen zum Extrahieren und Verwenden dieser Einstellungen in Ihrem DPC finden Sie unter Kundengeräte bereitstellen.

Entwicklung und Tests

Für die Entwicklung und das Testen der Zero-Touch-Registrierungsfunktionen Ihrer Konsole benötigen Sie Folgendes:

  • ein unterstütztes Gerät
  • ein Kundenkonto mit Zero-Touch-Registrierung

Entwickeln und testen Sie mit Geräten, die die Zero-Touch-Registrierung unterstützen, z. B. Google Pixel. Sie müssen Ihre Entwicklungsgeräte nicht bei einem Reseller-Partner kaufen.

Kontaktieren Sie uns, um ein Testkundenkonto und Zugriff auf das Zero-Touch-Registrierungsportal zu erhalten. Senden Sie uns eine E‑Mail über Ihre geschäftliche E‑Mail-Adresse, die mit einem Google-Konto verknüpft ist. Teilen Sie uns den Hersteller und die IMEI-Nummer von ein oder zwei Geräten mit. Wir fügen sie dann Ihrem Entwicklerkonto hinzu.

Da bei der Zero-Touch-Registrierung automatisch ein DPC heruntergeladen und installiert wird, muss Ihr DPC bei Google Play verfügbar sein, bevor Sie die Bereitstellung testen können. Sie können nicht mit einer Entwicklerversion Ihres DPC testen.

Support für IT-Administratoren

Wenn Sie IT-Administratoren in der Benutzeroberfläche Ihrer Konsole oder in Ihrer Dokumentation helfen müssen, lesen Sie den Artikel Kontaktlose Registrierung für IT-Administratoren. Sie können die Nutzer Ihrer Konsole auch auf diesen Hilfeartikel verweisen.

Weitere Informationen

Die folgenden Dokumente helfen Ihnen bei der Integration der Zero-Touch-Registrierung in Ihre Konsole: