Integrationsleitfaden für EMM

Dieser Leitfaden hilft Anbietern von Enterprise Mobility Management (EMM) dabei, die Zero-Touch-Registrierung in der Konsole nutzen. Lesen Sie weiter, um mehr über die Anmeldung zu erfahren und Best-Practice-Tipps zu erhalten. um Ihrem DPC (Device Policy Controller) bei der Bereitstellung von Geräten zu helfen. Wenn Sie einen DPC haben, lernen Sie Best Practices bei der Bereitstellung von Geräten kennen und erhalten Tipps, bei der Entwicklung und beim Testen.

Funktionen für IT-Administratoren

Mit der Customer API können IT-Administratoren die Zero-Touch-Registrierung direkt von in Ihrer Konsole. IT-Administratoren können in Ihrer Konsole unter anderem die folgenden Aufgaben ausführen:

  • 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 Käufe von Organisationen
  • Einzelne Konfigurationen auf Geräte anwenden oder Geräte aus Zero-Touch entfernen Registrierung.

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

Vorbereitung

Bevor Sie Ihrer EMM-Konsole die Zero-Touch-Registrierung hinzufügen, prüfen Sie, ob Ihr -Lösung unterstützt Folgendes:

  • Ihre EMM-Lösung muss ein unternehmenseigenes Gerät mit Android 8.0 oder höher (Pixel 7.1 oder höher) im Modus „Vollständig verwaltet“ bereitstellen. Unternehmenseigene Android-Geräte (Version 10 oder höher) können vollständig verwaltet oder mit einem Arbeitsprofil bereitgestellt.
  • Da bei der Zero-Touch-Registrierung automatisch ein DPC heruntergeladen und installiert wird, Der DPC muss 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 eine Produktänderungsanfrage über die EMM-Anbieter-Community um der Liste Ihren DPC hinzuzufügen.
  • Ihre Kunden benötigen ein Konto für die Zero-Touch-Registrierung, um die Customer API aufzurufen. Ein Partner-Reseller richtet das Konto für die Organisation eines IT-Administrators ein, wenn der Unternehmen ihre Geräte kaufen.
  • Das Gerät muss mit Google Mobile-Diensten (GMD) kompatibel sein. und die Google Play-Dienste müssen für die Zero-Touch-Registrierung immer aktiviert sein damit alles ordnungsgemäß funktioniert.

API aufrufen

Die Nutzer Ihrer Console autorisieren mit ihrem Google-Konto Ihre API-Anfragen an die Kunden-API. Dieser Vorgang unterscheidet sich von der Autorisierung, die Sie für anderen EMM-APIs. Weitere Informationen dazu, wie Sie dies in Ihrer App tun, finden Sie unter Autorisierung.

Umgang mit den Nutzungsbedingungen

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 Wenn der Antworttext ein TosError enthält, fordern Sie den Nutzer auf, zu akzeptieren. indem Sie sich im Portal für die Zero-Touch-Registrierung anmelden. Das Beispiel unten zeigt eine der Möglichkeiten:

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://partner.android.com/zerotouch'

# 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 Ihren Anfragen den HTTP-Header X-GOOG-API-FORMAT-VERSION mit dem Wert 2 hinzu. Wenn Ihr Client keine detaillierten Fehler unterstützt (.NET und andere), passen Sie die Fehlermeldung an.

Wenn wir die Nutzungsbedingungen in Zukunft aktualisieren, kann deine App fordert den Nutzer auf, die neuen Nutzungsbedingungen noch einmal zu akzeptieren.

IT-Administratoren nutzen das Portal für die Zero-Touch-Registrierung, um die Nutzer für ihre Unternehmen. Dies ist nicht über die Customer API möglich. IT-Administratoren können außerdem Geräte und Konfigurationen über das Portal zu verwalten. Wenn Sie von Ihrer Konsole oder in Ihrer Dokumentation eine Verknüpfung zum Portal herstellen möchten, verwenden Sie diese URL:

https://partner.android.com/zerotouch

Sie können die IT-Administratoren darüber informieren, dass sie aufgefordert werden, sich mit ihrem Google-Konto.

Geräteregistrierung

Die Zero-Touch-Registrierung ist ein Mechanismus zum Registrieren von Geräten und funktioniert ähnlich wie NFC. Registrierung oder QR-Code-Registrierung. Ihre Konsole muss verwaltete Geräte unterstützen Außerdem muss der DPC im vollständig verwalteten Gerätemodus ausgeführt werden können.

Die Zero-Touch-Registrierung ist auf unterstützten Geräten mit Android 8.0 oder . IT-Administratoren müssen unterstützte Geräte von einem Partnerreseller kaufen. Ihre Konsole kann welche Geräte des IT-Administrators für die Zero-Touch-Registrierung verfügbar sind, customers.devices.list wird aufgerufen.

So funktioniert die Registrierung:

  1. Ein Gerät meldet sich beim ersten Start (oder nach dem Zurücksetzen auf Werkseinstellungen) auf einem Google-Server an. Zurücksetzen) für die Zero-Touch-Registrierung.
  2. Wenn der IT-Administrator eine Konfiguration auf das Gerät angewendet hat, ist Zero-Touch wird der vollständig verwaltete Android-Einrichtungsassistent ausgeführt und die mit Metadaten aus der Konfiguration.
  3. Mit der Zero-Touch-Registrierung wird Ihr DPC von Google Play heruntergeladen und installiert.
  4. Ihr DPC erhält die ACTION_PROVISION_MANAGED_DEVICE Intent und stellt das Gerät bereit.

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

Standardkonfigurationen

Die Zero-Touch-Registrierung ist aber vor allem dann nützlich, wenn Sie eine Standardkonfiguration festlegen, die auf alle neuen Geräte angewendet wird, die Ihre Organisation kauft. Einstellung „Hochstufen“ eine Standardkonfiguration von Ihrer Konsole aus, falls keine festgelegt wurde. Anhand des Werts von customers.configurations.isDefault können Sie feststellen, ob eine Organisation eine Standardkonfiguration festgelegt hat.

Das folgende Beispiel zeigt, wie Sie eine bestehende Konfiguration Standardeinstellung:

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 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 ein eindeutige und unveränderliche ID für den DPC. Anruf customers.dpcs.list, um eine Liste aller unterstützten DPCs. Da der Ressourcenname auch die Kundennummer enthält, filtern Sie die Liste mithilfe der letzten Pfadkomponente eine übereinstimmende Dpc-Instanz zu finden. Das Beispiel wie Sie Ihren DPC abgleichen und für eine spätere Verwendung in einem Konfiguration:

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 der Konsole anzeigen müssen, Der von customers.dpcs.dpcName zurückgegebene Wert.

Wird bereitgestellt

Nutzen Sie die Gelegenheit, um die Gerätebereitstellung für Nutzer möglichst einfach zu gestalten. Für die Bereitstellung des Geräts sind in der Regel ein Nutzername und ein Passwort erforderlich. Denken Sie daran, dass Reseller Geräte möglicherweise direkt an Remote-Nutzer versenden. Fügen Sie alle anderen Einstellungen wie den EMM-Server oder die Organisationseinheit in customers.configuration.dpcExtras ein.

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\"]"
    }
}

Mit der Zero-Touch-Registrierung wird der DPC mit einem Android-Intent installiert und gestartet. Das System sendet die Werte im Feld android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE-JSON-Attribut zu Ihrem DPC als Extras im Intent. Ihr DPC kann die Bereitstellungseinstellungen mit denselben Schlüsseln aus der PersistableBundle lesen.

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

Nicht empfohlen: Fügen Sie keine der folgenden zusätzlichen Informationen hinzu, die Sie bei anderen Registrierungsmethoden verwenden könnten:

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

Entwicklung und Tests

Um die Funktionen der Zero-Touch-Registrierung Ihrer Konsole zu entwickeln und zu testen, müssen Sie Folgendes:

  • ein unterstütztes Gerät
  • ein Konto für die Zero-Touch-Registrierung eines Kunden

Mit Geräten, die Zero-Touch unterstützen, entwickeln und testen Registrierung von Google Pixel. Sie müssen sich erwerben Sie Ihre Entwicklungsgeräte bei einem Reseller-Partner.

Wenden Sie sich an uns, um ein Testkundenkonto und Zugriff auf die Portal für die Zero-Touch-Registrierung Senden Sie uns eine E-Mail von Ihrer Unternehmens-E-Mail-Adresse, die mit einem Google-Konto verknüpft sind, Konto. Informieren Sie uns über den Hersteller. und die IMEI-Nummer von einem oder zwei Geräten. Wir fügen sie Ihrer Entwicklung hinzu, Konto.

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

Support für IT-Administratoren

Wenn Sie IT-Administratoren in der Benutzeroberfläche Ihrer Konsole oder in Ihrer Dokumentation unterstützen möchten, Weitere Informationen finden Sie unter Zero-Touch-Registrierung für IT-Administratoren. Ich können die Nutzer der Konsole auch auf diesen Hilfeartikel verweisen.

Weitere Informationen

In diesen Dokumenten erfahren Sie, wie Sie die Zero-Touch-Registrierung in Ihr Console: