Краткое руководство по Java

Создайте приложение командной строки Java, которое отправляет запросы к API Google Meet.

Quickstarts объясняет, как настроить и запустить приложение, вызывающее API Google Workspace. В этом quickstart используется упрощенный подход к аутентификации, подходящий для среды тестирования. Для производственной среды мы рекомендуем изучить аутентификацию и авторизацию, прежде чем выбирать учетные данные для доступа , подходящие для вашего приложения.

В этом кратком руководстве используются рекомендуемые клиентские библиотеки API Google Workspace для обработки некоторых деталей процесса аутентификации и авторизации.

Цели

  • Настройте свою среду.
  • Настройте образец.
  • Запустите образец.

Предпосылки

  • Учетная запись Google Workspace с включенным Google Meet.

Настройте свою среду

Чтобы завершить этот быстрый старт, настройте свою среду.

Включить API

Перед использованием API Google вам необходимо включить их в проекте Google Cloud. Вы можете включить один или несколько API в одном проекте Google Cloud.

Если вы используете новый проект Google Cloud для завершения этого быстрого старта, настройте экран согласия OAuth. Если вы уже выполнили этот шаг для своего проекта Cloud, перейдите к следующему разделу.

  1. В консоли Google Cloud перейдите в > > Брендинг .

    Перейти к брендингу

  2. Если вы уже настроили , вы можете настроить следующие параметры экрана согласия OAuth в разделе Брендинг , Аудитория и Доступ к данным . Если вы видите сообщение, в котором говорится пока не настроено , нажмите «Начать» :
    1. В разделе «Информация о приложении» в поле «Имя приложения » введите имя приложения.
    2. В поле Адрес электронной почты службы поддержки пользователей выберите адрес электронной почты службы поддержки, по которому пользователи могут связаться с вами, если у них возникнут вопросы относительно их согласия.
    3. Нажмите Далее .
    4. В разделе «Аудитория» выберите «Внутренняя» .
    5. Нажмите Далее .
    6. В разделе «Контактная информация» введите адрес электронной почты , на который вы можете получать уведомления о любых изменениях в вашем проекте.
    7. Нажмите Далее .
    8. В разделе «Готово » ознакомьтесь с Политикой использования пользовательских данных служб API Google и, если вы согласны, выберите «Я согласен с Политикой использования пользовательских данных служб API Google» .
    9. Нажмите «Продолжить» .
    10. Нажмите «Создать» .
  3. На данный момент вы можете пропустить добавление областей действия. В будущем, когда вы создадите приложение для использования за пределами вашей организации Google Workspace, вы должны будете изменить тип пользователя на External . Затем добавьте области действия авторизации, которые требуются вашему приложению. Чтобы узнать больше, см. полное руководство по настройке согласия OAuth .

Авторизация учетных данных для настольного приложения

Для аутентификации конечных пользователей и доступа к данным пользователей в вашем приложении вам необходимо создать один или несколько идентификаторов клиента OAuth 2.0. Идентификатор клиента используется для идентификации одного приложения на серверах Google OAuth. Если ваше приложение работает на нескольких платформах, вам необходимо создать отдельный идентификатор клиента для каждой платформы.
  1. В консоли Google Cloud перейдите в > > Клиенты .

    Перейти к клиентам

  2. Нажмите «Создать клиента» .
  3. Нажмите Тип приложения > Настольное приложение .
  4. В поле Имя введите имя для учетных данных. Это имя отображается только в консоли Google Cloud.
  5. Нажмите «Создать» .

    Новые учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».

  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 по умолчанию и замените его содержимое следующим кодом:

    встреча/быстрый старт/сборка.gradle
    apply plugin: 'java'
    apply plugin: 'application'
    
    mainClassName = 'MeetQuickstart'
    sourceCompatibility = 11
    targetCompatibility = 11
    version = '1.0'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'com.google.cloud:google-cloud-meet:0.3.0'
        implementation 'com.google.auth:google-auth-library-oauth2-http:1.19.0'
        implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1'
    }

Настройте образец

  1. В каталоге src/main/java/ создайте новый файл Java с именем, соответствующим значению mainClassName в файле build.gradle .

  2. Включите следующий код в новый файл Java:

    встреча/быстрый старт/src/main/java/MeetQuickstart.java
    import java.awt.Desktop;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URI;
    import java.net.URL;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.Collections;
    import java.util.List;
    
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.gax.core.FixedCredentialsProvider;
    import com.google.apps.meet.v2.CreateSpaceRequest;
    import com.google.apps.meet.v2.Space;
    import com.google.apps.meet.v2.SpacesServiceClient;
    import com.google.apps.meet.v2.SpacesServiceSettings;
    import com.google.auth.Credentials;
    import com.google.auth.oauth2.ClientId;
    import com.google.auth.oauth2.DefaultPKCEProvider;
    import com.google.auth.oauth2.TokenStore;
    import com.google.auth.oauth2.UserAuthorizer;
    
    /* class to demonstrate use of Drive files list API */
    public class MeetQuickstart {
      /**
       * 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/meetings.space.created");
    
      private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
    
      private static final String USER = "default";
    
      // Simple file-based token storage for storing oauth tokens
      private static final TokenStore TOKEN_STORE = new TokenStore() {
        private Path pathFor(String id) {
          return Paths.get(".", TOKENS_DIRECTORY_PATH, id + ".json");
        }
    
        @Override
        public String load(String id) throws IOException {
          if (!Files.exists(pathFor(id))) {
            return null;
          }
          return Files.readString(pathFor(id));
        }
    
        @Override
        public void store(String id, String token) throws IOException {
          Files.createDirectories(Paths.get(".", TOKENS_DIRECTORY_PATH));
          Files.writeString(pathFor(id), token);
        }
    
        @Override
        public void delete(String id) throws IOException {
          if (!Files.exists(pathFor(id))) {
            return;
          }
          Files.delete(pathFor(id));
        }
      };
    
      /**
       * Initialize a UserAuthorizer for local authorization.
       * 
       * @param callbackUri
       * @return
       */
      private static UserAuthorizer getAuthorizer(URI callbackUri) throws IOException {
        // Load client secrets.
        try (InputStream in = MeetQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH)) {
          if (in == null) {
            throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
          }
    
          ClientId clientId = ClientId.fromStream(in);
    
          UserAuthorizer authorizer = UserAuthorizer.newBuilder()
              .setClientId(clientId)
              .setCallbackUri(callbackUri)
              .setScopes(SCOPES)
              .setPKCEProvider(new DefaultPKCEProvider() {
                // Temporary fix for https://github.com/googleapis/google-auth-library-java/issues/1373
                @Override
                public String getCodeChallenge() {
                  return super.getCodeChallenge().split("=")[0];
                }
              })
              .setTokenStore(TOKEN_STORE).build();
          return authorizer;
        }
      }
    
      /**
       * 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 {
    
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().build();
        try {
          URI callbackUri = URI.create(receiver.getRedirectUri());
          UserAuthorizer authorizer = getAuthorizer(callbackUri);
    
          Credentials credentials = authorizer.getCredentials(USER);
          if (credentials != null) {
            return credentials;
          }
    
          URL authorizationUrl = authorizer.getAuthorizationUrl(USER, "", null);
          if (Desktop.isDesktopSupported() && 
              Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
            Desktop.getDesktop().browse(authorizationUrl.toURI());
          } else {
            System.out.printf("Open the following URL to authorize access: %s\n",
                authorizationUrl.toExternalForm());
          }
    
          String code = receiver.waitForCode();
          credentials = authorizer.getAndStoreCredentialsFromCode(USER, code, callbackUri);
          return credentials;
        } finally {
          receiver.stop();
        }
      }
    
      public static void main(String... args) throws Exception {
        // Override default service settings to supply user credentials.
        Credentials credentials = getCredentials();
        SpacesServiceSettings settings = SpacesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credentials))
            .build();
    
        try (SpacesServiceClient spacesServiceClient = SpacesServiceClient.create(settings)) {
          CreateSpaceRequest request = CreateSpaceRequest.newBuilder()
              .setSpace(Space.newBuilder().build())
              .build();
          Space response = spacesServiceClient.createSpace(request);
          System.out.printf("Space created: %s\n", response.getMeetingUri());
        } catch (IOException e) {
          // TODO(developer): Handle errors
          e.printStackTrace();
        }
      }
    }

Запустите образец

  1. Запустите образец:

    gradle run
    
  1. При первом запуске образца вам будет предложено разрешить доступ:
    1. Если вы еще не вошли в свою учетную запись Google, войдите, когда вам будет предложено. Если вы вошли в несколько учетных записей, выберите одну учетную запись для использования при авторизации.
    2. Нажмите «Принять» .

    Ваше Java-приложение запускается и вызывает API Google Meet.

    Информация об авторизации хранится в файловой системе, поэтому при следующем запуске примера кода вам не будет предложено пройти авторизацию.

Следующие шаги