Java 快速入門

建立 Java 指令列應用程式,向 Google Chat API 發出要求。

快速入門指南會說明如何設定及執行呼叫 Google Workspace API 的應用程式。本快速入門導覽課程會使用簡化的驗證方法,適用於測試環境。在正式環境中,建議您先瞭解驗證和授權,再選擇適合應用程式的存取憑證

本快速入門指南會使用 Google Workspace 建議的 API 用戶端程式庫,處理驗證和授權流程的部分詳細資料。

目標

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

必要條件

設定環境

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

啟用 API

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

    啟用 API

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

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

    前往「品牌宣傳」

  2. 如果您已設定 ,可以在「品牌」、「目標對象」和「資料存取權」中設定下列 OAuth 同意畫面設定。如果看到「尚未設定」 訊息,請按一下「開始使用」
    1. 在「App Information」(應用程式資訊) 下方的「App name」(應用程式名稱) 欄位中,輸入應用程式名稱。
    2. 在「使用者支援電子郵件」中,選擇支援電子郵件地址,方便使用者在同意聲明方面有任何疑問時與您聯絡。
    3. 點選 [下一步]
    4. 在「目標對象」下方,選取「內部」
    5. 點選 [下一步]
    6. 在「聯絡資訊」下方,輸入可接收專案異動通知的電子郵件地址
    7. 點選 [下一步]
    8. 在「完成」部分,請詳閱《Google API 服務:使用者資料政策》,然後選取「我同意《Google API 服務:使用者資料政策》」
    9. 按一下 [繼續]。
    10. 按一下「Create」(建立)。
  3. 目前可以略過新增範圍。 日後為 Google Workspace 機構以外的使用者建立應用程式時,請務必將「使用者類型」變更為「外部」。然後新增應用程式需要的授權範圍。詳情請參閱完整的「設定 OAuth 同意畫面」指南。

授權電腦應用程式的憑證

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

    前往「客戶」

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

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

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

設定 Google Chat 應用程式

如要呼叫 Google Chat API,您必須設定 Google Chat 應用程式。對於任何寫入要求,Google Chat 會使用下列資訊,在 UI 中指派 Google Chat 應用程式。

  1. 在 Google Cloud 控制台中,前往 Chat API 的「Configuration」(設定) 頁面:

    前往 Chat API 設定頁面

  2. 在「Application info」(應用程式資訊) 之下,輸入下列資訊:

    1. 在「App name」(應用程式名稱) 欄位中輸入 Chat API quickstart app
    2. 在「Avatar URL」(虛擬人偶網址) 欄位中,輸入 https://developers.google.com/chat/images/quickstart-app-avatar.png
    3. 在「Description」(說明) 欄位中輸入 Quickstart for calling the Chat API
  3. 在「互動功能」下方,將「啟用互動功能」切換鈕設為關閉,即可停用 Chat 應用程式的互動功能。

  4. 按一下 [儲存]

準備工作區

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

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

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

    chat/quickstart/build.gradle
    apply plugin: 'java' apply plugin: 'application'  mainClassName = 'ChatQuickstart' sourceCompatibility = 11 targetCompatibility = 11 version = '1.0'  repositories {     mavenCentral() }  dependencies {     implementation 'com.google.auth:google-auth-library-oauth2-http:1.23.0'     implementation 'com.google.api-client:google-api-client:1.33.0'     implementation 'com.google.api.grpc:proto-google-cloud-chat-v1:0.8.0'     implementation 'com.google.api:gax:2.48.1'     implementation 'com.google.cloud:google-cloud-chat:0.1.0'     implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' }

設定範例

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

  2. 在新 Java 檔案中加入下列程式碼:

    chat/quickstart/src/main/java/ChatQuickstart.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.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.gax.core.FixedCredentialsProvider; import com.google.auth.Credentials; import com.google.auth.oauth2.AccessToken; import com.google.auth.oauth2.UserCredentials; import com.google.chat.v1.ChatServiceClient; import com.google.chat.v1.ChatServiceSettings; import com.google.chat.v1.ListSpacesRequest; import com.google.chat.v1.Space; import com.google.protobuf.util.JsonFormat; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Collections; import java.util.Date; import java.util.List;  /* class to demonstrate use of Google Chat API spaces list API */ public class ChatQuickstart {   /** Directory to store authorization tokens for this application. */   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/chat.spaces.readonly");    /** Global instance of the JSON factory. */   private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();    private static final String CREDENTIALS_FILE_PATH = "/credentials.json";    /**    * Run the OAuth2 flow for local/installed app.    *    * @return An authorized Credential object.    * @throws IOException If the credentials.json file cannot be found.    */   private static Credentials getCredentials() throws Exception {     // Load client secrets.     InputStream credentialsFileInputStream =         ChatQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);     if (credentialsFileInputStream == null) {       throw new FileNotFoundException("Credentials file resource not found.");     }     GoogleClientSecrets clientSecrets =         GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(credentialsFileInputStream));      // Set up authorization code flow.     GoogleAuthorizationCodeFlow flow =         new GoogleAuthorizationCodeFlow.Builder(                 GoogleNetHttpTransport.newTrustedTransport(), JSON_FACTORY, clientSecrets, SCOPES)             // Set these two options to generate refresh token alongside access token.             .setDataStoreFactory(new FileDataStoreFactory(new File(TOKENS_DIRECTORY_PATH)))             .setAccessType("offline")             .build();      // Authorize.     Credential credential =         new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");      // Build and return an authorized Credential object     AccessToken accessToken =         new AccessToken(             credential.getAccessToken(),             new Date(                 // put the actual expiry date of access token here                 System.currentTimeMillis()));     return UserCredentials.newBuilder()         .setAccessToken(accessToken)         .setRefreshToken(credential.getRefreshToken())         .setClientId(clientSecrets.getInstalled().getClientId())         .setClientSecret(clientSecrets.getInstalled().getClientSecret())         .build();   }    public static void main(String... args) throws Exception {     // Override default service settings to supply user credentials.     Credentials credentials = getCredentials();      // Create the ChatServiceSettings with the credentials     ChatServiceSettings chatServiceSettings =         ChatServiceSettings.newBuilder()             .setCredentialsProvider(FixedCredentialsProvider.create(credentials))             .build();      try (ChatServiceClient chatServiceClient = ChatServiceClient.create(chatServiceSettings)) {       ListSpacesRequest request =           ListSpacesRequest.newBuilder()               // Filter spaces by space type (SPACE or GROUP_CHAT or               // DIRECT_MESSAGE).               .setFilter("spaceType = \"SPACE\"")               .build();        // Iterate over results and resolve additional pages automatically.       for (Space response : chatServiceClient.listSpaces(request).iterateAll()) {         System.out.println(JsonFormat.printer().print(response));       }     }   } }

執行範例

  1. 執行範例:

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

    Java 應用程式會執行並呼叫 Google Chat API。

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

後續步驟