고객을 위한 자바 빠른 시작

이 빠른 시작 가이드의 단계를 따르면 약 10분 만에 제로터치에 요청을 보내는 간단한 Java 명령줄 앱 등록 고객 API

기본 요건

이 빠른 시작을 실행하려면 다음이 필요합니다.

1단계: 제로터치 등록 API 사용 설정하기

  1. 다음을 사용하세요. 마법사를 사용하여 Google Developers Console에서 프로젝트를 만들거나 선택하고 API를 자동으로 사용 설정합니다 계속을 클릭한 후 사용자 인증 정보로 이동을 클릭합니다. 를 참고하세요.
  2. 사용자 인증 정보 만들기에서 취소를 클릭합니다.
  3. 페이지 상단에서 OAuth 동의 화면 탭을 선택합니다. 선택 이메일 주소. 아직 설정되지 않은 경우 제품 이름을 입력합니다. 저장 버튼을 클릭합니다.
  4. 사용자 인증 정보 탭을 선택하고 사용자 인증 정보 만들기를 클릭합니다. 버튼을 클릭하고 OAuth 클라이언트 ID를 선택합니다.
  5. 애플리케이션 유형을 기타로 선택하고 이름을 입력합니다. '빠른 시작'을 클릭하고 만들기 버튼을 클릭합니다.
  6. 확인을 클릭하여 OAuth 클라이언트 패널을 닫습니다.
  7. JSON 다운로드를 클릭합니다.
  8. 파일을 작업 디렉터리로 이동하고 이름을 client_secret.json로 바꿉니다.

2단계: 프로젝트 준비

Gradle 프로젝트를 설정하려면 아래 단계를 따르세요.

  1. 다음 명령어를 실행하여 작업 디렉터리에 새 프로젝트를 만듭니다.

    gradle init --type basic
    mkdir -p src/main/java src/main/resources
    
  2. 1단계에서 다운로드한 client_secret.json 파일을 위에서 만든 src/main/resources/ 디렉터리

  3. 기본 build.gradle 파일을 열고 콘텐츠를 다음 코드를 참조하세요.

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'
}

3단계: 샘플 설정

src/main/java/CustomerQuickstart.java라는 파일을 만들고 파일을 저장합니다.

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());
    }
  }
}

4단계: 샘플 실행

운영체제의 도움말을 사용하여 파일에서 스크립트를 실행합니다. UNIX 및 Mac에서 터미널에서 아래 명령어를 실행합니다.

gradle -q run

앱을 처음 실행할 때는 다음과 같이 액세스 권한을 승인해야 합니다.

  1. 앱에서 기본 브라우저에서 새 탭을 열려고 합니다. 그래도 실패하면 브라우저에서 엽니다. 아직 Google 계정에 로그인하지 않았다면 로그인하라는 메시지가 표시됩니다. 여러 Google 계정에 로그인되어 있는 경우 페이지에서 승인 계정
  2. 수락을 클릭합니다.
  3. 브라우저 탭을 닫습니다. 앱이 계속 실행됩니다.

참고

  • Google API 클라이언트 라이브러리는 파일 시스템에 승인 데이터를 저장하므로 이후의 승인하라는 메시지가 표시되지 않습니다.
  • 앱의 승인 데이터를 재설정하려면 다음을 삭제합니다. ~/.credentials/zero-touch.quickstart.json 파일을 열고 앱을 다시 실행합니다.
  • 이 빠른 시작의 승인 흐름은 명령줄 앱에 이상적입니다. 추가하는 방법을 알아보려면 승인에 대한 자세한 내용은 페이지를 참조하세요. OAuth 2.0 웹 서버 애플리케이션을 참조하세요.

문제 해결

일반적으로 다음과 같은 사항을 확인해 보시기 바랍니다. 빠른 시작에서 어떤 문제가 발생했는지 알려주시면 문제 해결을 위해 노력하겠습니다.

  • 제로터치 등록 고객 계정에만 적용됩니다. 제로터치 등록 포털에 로그인해 보려면 동일한 Google 계정을 사용하여 액세스를 테스트합니다.
  • 계정이 포털. 를 참조하세요. 고객 계정.

자세히 알아보기