Java-Kurzanleitung für Kunden

Führen Sie die Schritte in dieser Kurzanleitung aus. In etwa 10 Minuten haben Sie eine einfache Java-Befehlszeile, die Anfragen an die Zero-Touch-Registrierungs-API sendet.

Voraussetzungen

Zum Ausführen dieser Kurzanleitung benötigen Sie Folgendes:

  • Ein Google-Konto, das Mitglied des Kontos für die Zero-Touch-Registrierung ist. Siehe Jetzt starten.
  • Java 1.7 oder höher.
  • Gradle 2.3 oder höher
  • Zugriff auf das Internet und einen Webbrowser.

Schritt 1: API für die Zero-Touch-Registrierung aktivieren

  1. Mit diesem Assistenten können Sie ein Projekt in der Google Developers Console erstellen oder auswählen und die API automatisch aktivieren. Klicken Sie auf Weiter und dann auf Anmeldedaten aufrufen.
  2. Klicken Sie unter „Anmeldedaten erstellen“ auf Abbrechen.
  3. Klicken Sie oben auf der Seite auf den Tab OAuth-Zustimmungsbildschirm. Wählen Sie eine E-Mail-Adresse aus, geben Sie einen Produktnamen ein, falls noch nicht geschehen, und klicken Sie auf die Schaltfläche Speichern.
  4. Wählen Sie den Tab Anmeldedaten aus. Klicken Sie auf die Schaltfläche Anmeldedaten erstellen und wählen Sie OAuth-Client-ID aus.
  5. Wählen Sie den Anwendungstyp Sonstiges aus, geben Sie den Namen „Kurzanleitung“ ein und klicken Sie auf die Schaltfläche Erstellen.
  6. Klicken Sie auf OK, um den Bereich OAuth-Client zu schließen.
  7. Klicken Sie auf JSON herunterladen.
  8. Verschieben Sie die Datei in Ihr Arbeitsverzeichnis und benennen Sie sie in client_secret.json um.

Schritt 2: Projekt vorbereiten

So richten Sie ein Gradle-Projekt ein:

  1. Führen Sie den folgenden Befehl aus, um ein neues Projekt im Arbeitsverzeichnis zu erstellen:

    gradle init --type basic
    mkdir -p src/main/java src/main/resources
    
  2. Kopieren Sie die Datei client_secret.json, die Sie in Schritt 1 heruntergeladen haben, in das Verzeichnis src/main/resources/, das Sie oben erstellt haben.

  3. Öffnen Sie die Standarddatei build.gradle und ersetzen Sie den Inhalt durch den folgenden Code:

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'CustomerQuickstart'
sourceCompatibility = 1.7
targetCompatibility = 1.7
version = '1.0'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.google.api-client:google-api-client:2.2.0'
    compile 'com.google.apis:google-api-services-androiddeviceprovisioning:v1-rev20230509-2.0.0'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.34.1'
}

Schritt 3: Beispiel einrichten

Erstellen Sie eine Datei mit dem Namen src/main/java/CustomerQuickstart.java, kopieren Sie den folgenden Code und speichern Sie die Datei.

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.androiddeviceprovisioning.v1.AndroidProvisioningPartner;
import com.google.api.services.androiddeviceprovisioning.v1.model.Company;
import com.google.api.services.androiddeviceprovisioning.v1.model.CustomerListCustomersResponse;
import com.google.api.services.androiddeviceprovisioning.v1.model.CustomerListDpcsResponse;
import com.google.api.services.androiddeviceprovisioning.v1.model.Dpc;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

/** This class forms the quickstart introduction to the zero-touch enrollemnt customer API. */
public class CustomerQuickstart {

  // A single auth scope is used for the zero-touch enrollment customer API.
  private static final List<String> SCOPES =
      Arrays.asList("https://www.googleapis.com/auth/androidworkzerotouchemm");
  private static final String APP_NAME = "Zero-touch Enrollment Java Quickstart";
  private static final java.io.File DATA_STORE_DIR =
      new java.io.File(System.getProperty("user.home"), ".credentials/zero-touch.quickstart.json");

  // Global shared instances
  private static FileDataStoreFactory DATA_STORE_FACTORY;
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  private static HttpTransport HTTP_TRANSPORT;

  static {
    try {
      HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
      DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
    } catch (Throwable t) {
      t.printStackTrace();
      System.exit(1);
    }
  }

  /**
   * Creates a Credential object with the correct OAuth2 authorization for the user calling the
   * customer API. The service endpoint invokes this method when setting up a new service instance.
   *
   * @return an authorized Credential object.
   * @throws IOException
   */
  public static Credential authorize() throws IOException {
    // Load client secrets.
    InputStream in = CustomerQuickstart.class.getResourceAsStream("/client_secret.json");

    GoogleClientSecrets clientSecrets =
        GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in, "UTF-8"));

    // Ask the user to authorize the request using their Google Account
    // in their browser.
    GoogleAuthorizationCodeFlow flow =
        new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(DATA_STORE_FACTORY)
            .setAccessType("offline")
            .build();
    Credential credential =
        new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
    System.out.println("Credential file saved to: " + DATA_STORE_DIR.getAbsolutePath());
    return credential;
  }

  /**
   * Build and return an authorized zero-touch enrollment API client service. Use the service
   * endpoint to call the API methods.
   *
   * @return an authorized client service endpoint
   * @throws IOException
   */
  public static AndroidProvisioningPartner getService() throws IOException {
    Credential credential = authorize();
    return new AndroidProvisioningPartner.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
        .setApplicationName(APP_NAME)
        .build();
  }

  /**
   * Runs the zero-touch enrollment quickstart app.
   *
   * @throws IOException
   */
  public static void main(String[] args) throws IOException {

    // Create a zero-touch enrollment API service endpoint.
    AndroidProvisioningPartner service = getService();

    // Get the customer's account. Because a customer might have more
    // than one, limit the results to the first account found.
    AndroidProvisioningPartner.Customers.List accountRequest = service.customers().list();
    accountRequest.setPageSize(1);
    CustomerListCustomersResponse accountResponse = accountRequest.execute();
    if (accountResponse.getCustomers().isEmpty()) {
      // No accounts found for the user. Confirm the Google Account
      // that authorizes the request can access the zero-touch portal.
      System.out.println("No zero-touch enrollment account found.");
      System.exit(-1);
    }
    Company customer = accountResponse.getCustomers().get(0);
    String customerAccount = customer.getName();

    // Send an API request to list all the DPCs available using the customer account.
    AndroidProvisioningPartner.Customers.Dpcs.List request =
        service.customers().dpcs().list(customerAccount);
    CustomerListDpcsResponse response = request.execute();

    // Print out the details of each DPC.
    java.util.List<Dpc> dpcs = response.getDpcs();
    for (Dpc dpcApp : dpcs) {
      System.out.format("Name:%s  APK:%s\n", dpcApp.getDpcName(), dpcApp.getPackageName());
    }
  }
}

Schritt 4: Beispiel ausführen

Verwenden Sie die Hilfe Ihres Betriebssystems zum Ausführen des Skripts in der Datei. Führen Sie auf UNIX- und Mac-Computern den folgenden Befehl in Ihrem Terminal aus:

gradle -q run

Wenn Sie die App zum ersten Mal ausführen, müssen Sie den Zugriff autorisieren:

  1. Die App versucht, einen neuen Tab in Ihrem Standardbrowser zu öffnen. Kopieren Sie in diesem Fall die URL aus der Console und öffnen Sie sie in Ihrem Browser. Wenn Sie noch nicht in Ihrem Google-Konto angemeldet sind, werden Sie aufgefordert, sich anzumelden. Wenn du in mehreren Google-Konten angemeldet bist, wirst du auf der Seite aufgefordert, ein Konto für die Autorisierung auszuwählen.
  2. Klicken Sie auf Akzeptieren.
  3. Schließen Sie den Browsertab, damit die App weiter ausgeführt wird.

Hinweise

  • Da die Google API-Clientbibliothek Autorisierungsdaten im Dateisystem speichert, werden Sie bei nachfolgenden Einführungen nicht zur Autorisierung aufgefordert.
  • Wenn Sie die Autorisierungsdaten der Anwendung zurücksetzen möchten, löschen Sie die Datei ~/.credentials/zero-touch.quickstart.json und führen Sie die Anwendung noch einmal aus.
  • Der Autorisierungsvorgang in dieser Kurzanleitung ist ideal für eine Befehlszeilenanwendung. Informationen zum Hinzufügen einer Autorisierung zu einer Webanwendung finden Sie unter OAuth 2.0-Webserveranwendungen.

Fehlerbehebung

Hier sind einige häufige Punkte, die Sie überprüfen sollten. Teilen Sie uns mit, was bei der Kurzanleitung aufgetreten ist. Wir kümmern uns dann darum.

  • Prüfen Sie, ob Sie API-Aufrufe mit dem Google-Konto autorisieren, das auch für Ihr Zero-Touch-Registrierungskundenkonto enthalten ist. Versuchen Sie, Ihren Zugriff auf das Portal für die Zero-Touch-Registrierung mit demselben Google-Konto anzumelden.
  • Prüfen Sie, ob das Konto im Portal die neuesten Nutzungsbedingungen akzeptiert hat. Weitere Informationen finden Sie unter Kundenkonten.

Weitere Informationen