Java

Google предоставляет клиентскую библиотеку Java для взаимодействия с Ad Manager API. Мы рекомендуем использовать клиентскую библиотеку с Apache Maven или Gradle.

Чтобы начать работу, создайте новый проект в выбранной вами IDE или добавьте зависимость в существующий проект. Google публикует артефакты клиентской библиотеки в центральном репозитории Maven как com.google.api-ads/ad-manager.

Maven

<!-- pom.xml -->
<dependency>
  <groupId>com.google.api-ads</groupId>
  <artifactId>ad-manager</artifactId>
  <version>0.58.0</version>
</dependency>

Gradle

implementation 'com.google.api-ads:ad-manager:0.58.0'

Как настроить учетные данные

Клиентская библиотека Java использует для аутентификации OAuth2 и Application Default Credentials (ADC).

ADC выполняет поиск учетных данных в следующем порядке:

  1. переменной среды GOOGLE_APPLICATION_CREDENTIALS.
  2. Учетные данные пользователя, настроенные с помощью интерфейса командной строки Google Cloud (gcloud CLI).
  3. При работе в Google Cloud – сервисный аккаунт, прикрепленный к ресурсу Google Cloud.

Информацию о том, как создать и настроить учетные данные ADC, можно найти в разделе Аутентификация.

Как отправить первый запрос

У каждого сервиса есть объект ServiceClient с синхронными и асинхронными методами для каждого метода REST. В приведенном ниже примере выполняется синхронное чтение Network.

import com.google.ads.admanager.v1.GetNetworkRequest;
import com.google.ads.admanager.v1.Network;
import com.google.ads.admanager.v1.NetworkName;
import com.google.ads.admanager.v1.NetworkServiceClient;

public class SyncGetNetwork {

  public static void main(String[] args) throws Exception {
    syncGetNetwork();
  }

  public static void syncGetNetwork() throws Exception {
    try (NetworkServiceClient networkServiceClient = NetworkServiceClient.create()) {
      GetNetworkRequest request =
          GetNetworkRequest.newBuilder()
              .setName(NetworkName.of("[NETWORK_CODE]").toString())
              .build();
      Network response = networkServiceClient.getNetwork(request);
    }
  }
}

Примеры других методов и ресурсов можно найти в репозитории GitHub: googleapis/google-cloud-java.

Как регистрировать HTTP-запросы и ответы

Класс com.google.api.client.http.HttpTransport выполняет все HTTP-запросы. Этот класс использует java.util.logging (JUL) для регистрации сведений о запросах и ответах HTTP, включая URL, заголовки и контент.

Чтобы включить ведение журнала, задайте для регистратора этого класса уровень журнала CONFIG или выше. Порядок действий зависит от того, какой метод ведения журналов вы используете.

ИЮЛ

Чтобы включить ведение журнала, задайте для параметра com.google.api.client.http.level значение CONFIG или выше в файле logging.properties.

handlers=java.util.logging.ConsoleHandler
com.google.api.client.http.level=CONFIG
java.util.logging.ConsoleHandler.level=CONFIG

Вы также можете включить ведение журнала в коде Java.


import com.google.api.client.http.HttpTransport;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

public static void enableLogging() {
  Logger logger = Logger.getLogger(HttpTransport.class.getName());
  logger.setLevel(Level.CONFIG);
  ConsoleHandler handler = new ConsoleHandler();
  handler.setLevel(Level.CONFIG);
  logger.addHandler(handler);
}

Log4j

Если вы используете Log4j для ведения журналов, то можете использовать Log4j JDK Logging Adapter для регистрации сообщений JUL. Это можно сделать с помощью файла SystemProperty или с помощью файла Log4jBridgeHandler и файла JUL logging.properties.

Свойство системы

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

Обработчик моста Log4j

handlers = org.apache.logging.log4j.jul.Log4jBridgeHandler
org.apache.logging.log4j.jul.Log4jBridgeHandler.propagateLevels = true

Эти настройки позволяют записывать журналы Ad Manager API в любой регистратор с уровнем CONFIG или выше. В приведенном ниже примере файла log4j2.xml настраивается регистратор, который записывает данные в файл System.out.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Logger name="com.google.api.client.http.HttpTransport" level="debug">
      <AppenderRef ref="Console"/>
    </Logger>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

Обработка ошибок

Все ошибки Ad Manager API являются подклассами ApiException в клиентской библиотеке Java.

Метод ApiException.getReason() возвращает строку, которая однозначно определяет типы ошибок. Используйте его, чтобы определить, как устранить ошибку.

Все ошибки, кроме 404 Not Found и 401 Unauthorized, содержат ErrorDetails с дополнительной информацией. Для ошибок 400 Bad Request объект ErrorDetails содержит объект BadRequest со списком FieldViolations.

try {
  // ...
} catch (ApiException apiException) {
  // HTTP status code enum
  com.google.api.gax.rpc.StatusCode statusCode = apiException.getStatusCode();

  // Unique identifier for the type of error
  String errorCode = apiException.getReason();

  // Human readable error message
  String errorMessage = apiException.getMessage();

  // Additional information is available in ErrorDetails.
  ErrorDetails errorDetails = apiException.getErrorDetails();
  if (errorDetails != null) {
    // Additional information for 400 Bad Request errors
    if (errorDetails.getBadRequest() != null) {
      // List of field violations
      List<BadRequest.FieldViolation> fieldViolations =
          errorDetails.getBadRequest().getFieldViolationsList();
    }
  }
}

Ошибки Ad Manager API также содержат уникальный request_id, который можно предоставить службе поддержки для устранения неполадок. В приведенном ниже примере извлекается значение request_id.

ErrorDetails errorDetails = apiException.getErrorDetails();
if (errorDetails != null && errorDetails.getRequestInfo() != null) {
  // Unique request identifier.
  String requestId = errorDetails.getRequestInfo().getRequestId();
}

Как создавать названия ресурсов

Клиентская библиотека предоставляет вспомогательные классы для создания названий ресурсов на основе идентификаторов.

import com.google.ads.admanager.v1.OrderName;

// ...

//  Constructs a String in the format:
//  "networks/{networkCode}/orders/{orderId}"
OrderName.of("123", "789");

Настройка прокси-сервера

Клиентская библиотека Java учитывает настройки системных свойств http.proxyHost и https.proxyHost. Подробнее о настройках сети Java и прокси-серверах…