Hướng dẫn nhanh về Java cho khách hàng

Làm theo các bước trong hướng dẫn nhanh này và trong khoảng 10 phút, bạn sẽ có một ứng dụng dòng lệnh Java đơn giản để gửi yêu cầu đến API khách hàng đăng ký không tiếp xúc.

Điều kiện tiên quyết

Để chạy hướng dẫn nhanh này, bạn cần:

  • Một Tài khoản Google là thành viên của tài khoản khách hàng thiết lập tự động. Xem phần Bắt đầu.
  • Java 1.7 trở lên.
  • Gradle 2.3 trở lên.
  • Có quyền truy cập Internet và trình duyệt web.

Bước 1: Bật API đăng ký không tiếp xúc

  1. Sử dụng trình hướng dẫn này để tạo hoặc chọn dự án trong Google Developers Console và tự động bật API. Nhấp vào Tiếp tục, rồi nhấp vào Chuyển đến thông tin xác thực.
  2. Nhấp vào Huỷ trên trang Tạo thông tin xác thực.
  3. Ở đầu trang, hãy chọn thẻ Màn hình xin phép bằng OAuth. Chọn một Địa chỉ email, nhập Tên sản phẩm nếu bạn chưa đặt tên, rồi nhấp vào nút Lưu.
  4. Chọn thẻ Thông tin xác thực, nhấp vào nút Tạo thông tin xác thực rồi chọn Mã ứng dụng khách OAuth.
  5. Chọn loại ứng dụng Other (Khác), nhập tên "Quickstart" (Khởi động nhanh) rồi nhấp vào nút Create (Tạo).
  6. Nhấp vào OK để đóng bảng điều khiển Ứng dụng khách OAuth.
  7. Nhấp vào Tải tệp JSON xuống.
  8. Di chuyển tệp này vào thư mục đang hoạt động rồi đổi tên thành client_secret.json.

Bước 2: Chuẩn bị dự án

Hãy làm theo các bước bên dưới để thiết lập dự án Gradle của bạn:

  1. Chạy lệnh sau để tạo một dự án mới trong thư mục đang hoạt động:

    gradle init --type basic
    mkdir -p src/main/java src/main/resources
    
  2. Sao chép tệp client_secret.json bạn đã tải xuống ở Bước 1 vào thư mục src/main/resources/ mà bạn đã tạo ở trên.

  3. Mở tệp build.gradle mặc định rồi thay thế nội dung của tệp đó bằng đoạn mã sau:

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

Bước 3: Thiết lập mẫu

Tạo một tệp có tên src/main/java/CustomerQuickstart.java, sao chép mã sau rồi lưu tệp.

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

Bước 4: Chạy mẫu

Sử dụng tính năng trợ giúp của hệ điều hành để chạy tập lệnh trong tệp. Trên máy tính UNIX và Mac, hãy chạy lệnh dưới đây trong dòng lệnh:

gradle -q run

Trong lần đầu chạy ứng dụng, bạn cần uỷ quyền truy cập:

  1. Ứng dụng sẽ cố gắng mở một thẻ mới trong trình duyệt mặc định của bạn. Nếu cách này không thành công, hãy sao chép URL từ bảng điều khiển và mở URL đó trong trình duyệt của bạn. Nếu chưa đăng nhập vào Tài khoản Google, bạn sẽ được nhắc đăng nhập. Nếu bạn đã đăng nhập vào nhiều Tài khoản Google, trang này sẽ nhắc bạn chọn một tài khoản để uỷ quyền.
  2. Nhấp vào Chấp nhận.
  3. Đóng thẻ trình duyệt, ứng dụng sẽ tiếp tục chạy.

Ghi chú

  • Vì thư viện ứng dụng API của Google lưu trữ dữ liệu uỷ quyền trên hệ thống tệp, nên các lần chạy tiếp theo sẽ không nhắc bạn uỷ quyền.
  • Để đặt lại dữ liệu uỷ quyền của ứng dụng, hãy xoá tệp ~/.credentials/zero-touch.quickstart.json rồi chạy lại ứng dụng.
  • Quy trình uỷ quyền trong hướng dẫn nhanh này rất phù hợp với ứng dụng dòng lệnh. Để tìm hiểu cách thêm quyền uỷ quyền vào ứng dụng web, hãy xem phần Ứng dụng máy chủ web OAuth 2.0.

Khắc phục sự cố

Sau đây là một số điều thường gặp mà bạn nên kiểm tra. Hãy cho chúng tôi biết vấn đề xảy ra với hướng dẫn nhanh và chúng tôi sẽ cố gắng khắc phục.

  • Kiểm tra để đảm bảo rằng bạn đang uỷ quyền cho các lệnh gọi API bằng cùng một Tài khoản Google là thành viên của tài khoản khách hàng đăng ký không tiếp xúc. Hãy thử đăng nhập vào cổng đăng ký thiết lập tự động bằng cùng một Tài khoản Google để kiểm tra quyền truy cập của bạn.
  • Xác nhận rằng tài khoản đó đã chấp nhận Điều khoản dịch vụ mới nhất trong cổng. Xem phần Tài khoản khách hàng.

Tìm hiểu thêm