Java 快速入門

快速入門說明如何設定及執行呼叫 Google Workspace API 的應用程式。

Google Workspace 快速入門會使用 API 用戶端程式庫處理驗證和授權流程的部分細節。建議您為自家應用程式使用用戶端程式庫。本快速入門導覽課程會使用簡化的驗證方法,適合測試環境使用。如要使用正式環境,建議您先瞭解驗證和授權,再選擇適合應用程式的存取憑證

建立向 Postmaster Tools API 提出要求的 Java 指令列應用程式。

目標

  • 設定環境。
  • 設定範例。
  • 執行範例。

必要條件

  • 已啟用 Gmail 的 Google 帳戶。

設定環境

如要完成本快速入門課程,請設定環境。

啟用 API

使用 Google API 前,您必須先在 Google Cloud 專案中啟用這些 API。您可以在單一 Google Cloud 專案中啟用一或多個 API。
  • 在 Google Cloud 控制台中啟用 Postmaster Tools API。

    啟用 API

如果您要使用新的 Google Cloud 專案完成這個快速入門課程,請設定 OAuth 同意畫面。如果您已為 Cloud 專案完成這個步驟,請跳至下一節。

  1. 在 Google Cloud 控制台中,依序前往「選單」 >>「品牌」

    前往「品牌」

  2. 如果您已設定 ,可以在「品牌」、「目標對象」和「資料存取」中設定下列 OAuth 同意畫面設定。如果畫面上顯示「尚未設定」 ,請按一下「開始使用」
    1. 在「應用程式資訊」下方的「應用程式名稱」中,輸入應用程式名稱。
    2. 在「使用者支援電子郵件」中,選擇使用者有同意聲明相關問題時可與您聯絡的支援電子郵件地址。
    3. 點選 [下一步]
    4. 在「觀眾」下方,選取「內部」
    5. 點選 [下一步]
    6. 在「聯絡資訊」下方,輸入電子郵件地址,以便在專案有任何異動時通知您。
    7. 點選 [下一步]
    8. 在「Finish」下方,詳閱「Google API 服務使用者資料政策」,如果同意,請選取「I agree to the Google API Services: User Data Policy」
    9. 按一下 [繼續]。
    10. 按一下 [建立]。
  3. 目前您可以略過新增範圍的步驟。 日後,如果您建立的應用程式是供 Google Workspace 機構以外的使用者使用,就必須將使用者類型變更為外部。然後新增應用程式所需的授權範圍。詳情請參閱完整的「設定 OAuth 同意聲明」指南。

授權電腦版應用程式的憑證

如要驗證使用者,並在應用程式中存取使用者資料,您需要建立一或多個 OAuth 2.0 用戶端 ID。用戶端 ID 可讓 Google 的 OAuth 伺服器識別單一應用程式。如果您的應用程式在多個平台上執行,則必須為每個平台建立專屬的用戶端 ID。
  1. 在 Google Cloud 控制台中,依序前往「選單」 >>「Clients」

    前往「客戶」

  2. 按一下「Create Client」
  3. 依序點選「應用程式類型」>「桌面應用程式」
  4. 在「Name」欄位中輸入憑證名稱。這個名稱只會顯示在 Google Cloud 控制台中。
  5. 按一下 [Create] (建立)

    新建立的憑證會顯示在「OAuth 2.0 用戶端 ID」下方。

  6. 將下載的 JSON 檔案儲存為 credentials.json,然後將檔案移至工作目錄。

準備工作區

  1. 在工作目錄中建立新的專案結構:

    gradle init --type basic
    mkdir -p src/main/java src/main/resources 
    
  2. src/main/resources/ 目錄中,複製先前下載的 credentials.json 檔案。

  3. 開啟預設的 build.gradle 檔案,然後將內容替換為下列程式碼:

      apply plugin: 'java'
    apply plugin: 'application'
    
    mainClassName = 'GmailPostmasterToolsQuickstart'
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    version = '1.0'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'com.google.api-client:google-api-client:1.23.0'
        implementation 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
        implementation 'com.google.apis:google-api-services-gmailpostmastertools:v1-rev20210528-1.31.0'
    }
    

設定範例

  1. src/main/java/ 目錄中,建立新的 Java 檔案,檔案名稱必須與 build.gradle 檔案中的 mainClassName 值相符。

  2. 在新 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.javanet.NetHttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.gmailpostmastertools.v1beta1.PostmasterTools;
    import com.google.api.services.gmailpostmastertools.v1beta1.model.*;
    
    import java.io.*;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;
    
    public class PostmasterToolsApiQuickStart {
        private static final String APPLICATION_NAME = "PostmasterTools API Java Quickstart";
        private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
        private static final String TOKENS_DIRECTORY_PATH = "tokens";
    
        /**
         * Global instance of the scopes required by this quickstart.
         * If modifying these scopes, delete your previously saved tokens/ folder.
         */
        private static final List<String> SCOPES = Collections.singletonList("https://www.googleapis.com/auth/postmaster.readonly");
        private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
    
        /**
         * Creates an authorized Credential object.
         * @param HTTP_TRANSPORT The network HTTP Transport.
         * @return An authorized Credential object.
         * @throws IOException If the credentials.json file cannot be found.
         */
        private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
            // Load client secrets.
            InputStream in = PostmasterToolsApiQuickStart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
            if (in == null) {
                throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
            }
            GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
    
            // Build flow and trigger user authorization request.
            GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                    .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
                    .setAccessType("offline")
                    .build();
            LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8891).build();
            return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
        }
    
        public static void main(String... args) throws IOException, GeneralSecurityException {
            // Build a new authorized API client service.
            final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
            PostmasterTools postmasterTools = new PostmasterTools.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
                    .setApplicationName(APPLICATION_NAME)
                    .build();
    
            List<Domain> domains = postmasterTools.domains().list().execute().getDomains();
            if (domains == null || domains.isEmpty()) {
                System.out.println("No domains found!");
            } else {
                for (Domain domain : domains) {
                    System.out.println(domain.toPrettyString());
                }
            }
        }
    }
    
    

執行範例

  1. 執行範例:

    gradle run
    
  1. 第一次執行範例時,系統會提示您授權存取權:
    1. 如果尚未登入 Google 帳戶,請在系統提示時登入。如果您登入了多個帳戶,請選取要用於授權的帳戶。
    2. 然後點選 [Accept]

    Java 應用程式會執行並呼叫 Postmaster Tools API。

    授權資訊會儲存在檔案系統中,因此下次執行範例程式碼時,系統不會提示您授權。

後續步驟