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:

  • Konfigurationen für die Zero-Touch-Registrierung basierend auf Ihren Richtlinien für Mobilgeräte.
  • 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 den Ü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 unternehmenseigenes Android 8.0 oder höher (Pixel 7.1 oder höher) bereitstellen im vollständig verwalteten Modus. 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 der kompatiblen DPCs. die IT-Administratoren mit der Kunden-API oder dem 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 Konsole autorisieren Ihre API-Anfragen mit ihrem Google-Konto für der Kunden-API. Dieser Vorgang unterscheidet sich von der Autorisierung, die Sie für anderen EMM-APIs. Unter Autorisierung erfahren Sie, wie Sie dies in Ihrer App tun.

Handle 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 den HTTP-Header X-GOOG-API-FORMAT-VERSION mit dem Wert 2 in Ihren Anfragen. 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 eine Verknüpfung mit der von Ihrer Konsole aus oder in Ihrer Dokumentation öffnen 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 und der DPC muss 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 Partner erwerben. Reseller. 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 Siehe Bereitstellung unten.

Standardkonfigurationen

IT-Administratoren profitieren am meisten von der Zero-Touch-Registrierung, wenn sie eine Standardkonfiguration festlegen. die auf alle neuen Geräte angewendet wird, die die Organisation kauft. Einstellung „Hochstufen“ eine Standardkonfiguration von Ihrer Konsole aus, falls keine festgelegt wurde. Sie können die Wert von customers.configurations.isDefault bis um herauszufinden, 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 die Verwendung des API-Ressourcennamens customers.dpcs.name 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 diese Gelegenheit, um die Gerätebereitstellung nutzerfreundlicher 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. Einschließen alle anderen Einstellungen, z. B. EMM-Server oder Organisationseinheiten, customers.configuration.dpcExtras

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 Nutzerverwaltungseinstellungen aus der PersistableBundle mit denselben Schlüsseln

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

Nicht empfohlen: Lassen Sie Folgendes weg. Extras, die Sie bei anderen Registrierungsmethoden nutzen können:

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.

Da bei der Zero-Touch-Registrierung automatisch ein DPC muss Ihr DPC bei Google Play verfügbar sein, damit Sie testen können Nutzerverwaltung. Tests mit einer Entwicklerversion Ihres DPC sind nicht möglich.

Support für IT-Administratoren

Wenn Sie IT-Administratoren über die Benutzeroberfläche Ihrer Konsole oder Ihre 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: