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

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

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

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

Цели

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

Предварительные требования

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

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

Для завершения этого краткого руководства настройте свою среду.

Включить API

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

Создайте учетную запись службы

Служебная учетная запись — это особый тип учетной записи, используемый приложением, а не человеком. Вы можете использовать служебную учетную запись для доступа к данным или выполнения действий от имени учетной записи робота, а также для доступа к данным от имени пользователей Google Workspace или Cloud Identity. Для получения дополнительной информации см. раздел «Понимание служебных учетных записей» .

Консоль Google Cloud

  1. В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .

    Перейдите в раздел «Учетные записи служб».

  2. Нажмите «Создать учетную запись службы» .
  3. Заполните данные учетной записи службы, затем нажмите «Создать и продолжить» .
  4. Необязательно: назначьте роли вашей учетной записи службы, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Для получения более подробной информации см. раздел «Предоставление, изменение и отзыв доступа к ресурсам» .
  5. Нажмите «Продолжить» .
  6. Необязательно: укажите пользователей или группы, которые могут управлять этой учетной записью службы и выполнять с ней действия. Дополнительные сведения см. в разделе «Управление имитацией учетной записи службы» .
  7. Нажмите «Готово» . Запишите адрес электронной почты учетной записи службы.

gcloud CLI

  1. Создайте учетную запись службы:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Необязательно: назначьте роли вашей учетной записи службы, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Для получения более подробной информации см. раздел «Предоставление, изменение и отзыв доступа к ресурсам» .

Создайте учетные данные для служебной учетной записи.

Вам необходимо получить учетные данные в виде пары открытого/закрытого ключей. Эти учетные данные используются вашим кодом для авторизации действий учетной записи службы внутри вашего приложения.
  1. В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .

    Перейдите в раздел «Учетные записи служб».

  2. Выберите свой сервисный аккаунт.
  3. Нажмите «Клавиши» > «Добавить клавишу» > «Создать новую клавишу» .
  4. Выберите JSON , затем нажмите «Создать» .

    Ваша новая пара открытого/закрытого ключей будет сгенерирована и загружена на ваш компьютер в виде нового файла. Сохраните загруженный JSON-файл как credentials.json в вашей рабочей директории. Этот файл является единственной копией данного ключа. Информацию о том, как безопасно хранить ключ, см. в разделе «Управление ключами учетных записей служб» .

  5. Нажмите «Закрыть» .

Настройте делегирование полномочий для учетной записи службы в масштабе всего домена.

Для вызова API от имени пользователей в организации Google Workspace вашей учетной записи службы необходимо предоставить полномочия на уровне домена в консоли администратора Google Workspace от учетной записи суперадминистратора. Дополнительную информацию см. в разделе «Делегирование полномочий на уровне домена учетной записи службы» .
  1. В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .

    Перейдите в раздел «Учетные записи служб».

  2. Выберите свой сервисный аккаунт.
  3. Нажмите «Показать дополнительные настройки» .
  4. В разделе «Делегирование в масштабе домена» найдите «Идентификатор клиента» вашей учетной записи службы. Нажмите «Копировать », чтобы скопировать значение идентификатора клиента в буфер обмена.
  5. Если у вас есть права суперадминистратора для соответствующей учетной записи Google Workspace, нажмите «Просмотреть консоль администратора Google Workspace» , затем войдите в систему, используя учетную запись суперадминистратора, и продолжите выполнение следующих шагов.

    Если у вас нет прав суперадминистратора для соответствующей учетной записи Google Workspace, свяжитесь с суперадминистратором этой учетной записи и отправьте ему идентификатор клиента (Client ID) вашей служебной учетной записи и список областей действия OAuth (OAuth Scopes), чтобы он мог выполнить следующие шаги в консоли администратора.

    1. В консоли администратора Google перейдите в > Безопасность > Доступ и контроль данных > Управление API .

      Перейдите к элементам управления API

    2. Нажмите «Управление делегированием в масштабе домена» .
    3. Нажмите «Добавить новый» .
    4. В поле "Идентификатор клиента" вставьте ранее скопированный идентификатор клиента.
    5. В поле "Области действия OAuth" введите список областей действия, разделенных запятыми, которые необходимы для вашего приложения. Это тот же набор областей действия, который вы определили при настройке экрана согласия OAuth.
    6. Нажмите «Авторизовать» .

Подготовьте рабочее место

  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 = 'KeepQuickstart'
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    version = '1.0'
    
    sourceCompatibility = 1.8
    
    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-keep:v1-rev20210528-1.31.0'
    }
    

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

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

  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.gson.GsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.keep.v1.Keep;
    import com.google.api.services.keep.v1.model.Note;
    import com.google.api.services.keep.v1.model.Section;
    import com.google.api.services.keep.v1.model.TextContent;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;
    
    public class KeepQuickstart {
    
      private static final String APPLICATION_NAME = "Google Keep API Java Quickstart";
      private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
    
      /**
       * Global instance of the scopes required by this quickstart. If modifying these scopes, delete
       * your previously saved tokens/ folder.
       */
      private static final List<String> KEEP_SCOPES =
          Collections.singletonList("https://www.googleapis.com/auth/keep");
    
      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
       */
      private static Credential getOAuthCredentials(final NetHttpTransport HTTP_TRANSPORT)
          throws IOException {
        // Load client secrets.
        InputStream in = KeepQuickstart.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, KEEP_SCOPES)
                .setDataStoreFactory(new FileDataStoreFactory(new java.io.File("tokens")))
                .setAccessType("offline")
                .build();
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).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();
        Keep service =
            new Keep.Builder(HTTP_TRANSPORT, JSON_FACTORY, getOAuthCredentials(HTTP_TRANSPORT))
                .setApplicationName(APPLICATION_NAME)
                .build();
    
        Section noteBody =
            new Section().setText(new TextContent().setText("Finish preparations by tomorrow!"));
        Note newNote = new Note().setTitle("Customer call next week").setBody(noteBody);
    
        // Creates a new text note.
        service.notes().create(newNote).execute();
      }
    }
    
    

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

  1. Запустите пример:

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

    Ваше Java-приложение запускается и обращается к API Google Keep.

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

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