Java

Google มีไลบรารีของไคลเอ็นต์ Java สำหรับการโต้ตอบกับ Ad Manager API เราขอแนะนำให้ใช้ไลบรารีของไคลเอ็นต์กับ Apache Maven หรือ Gradle

หากต้องการเริ่มต้นใช้งาน ให้สร้างโปรเจ็กต์ใหม่ใน IDE ที่คุณเลือกหรือเพิ่มทรัพยากร Dependency ลงในโปรเจ็กต์ที่มีอยู่ Google เผยแพร่อาร์ติแฟกต์ไลบรารีของไคลเอ็นต์ไปยังที่เก็บส่วนกลางของ Maven เป็น com.google.api-ads/ad-manager

Maven

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

Gradle

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

กำหนดค่าข้อมูลเข้าสู่ระบบ

ไลบรารีของไคลเอ็นต์ Java ใช้ OAuth2 และข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน (ADC) เพื่อตรวจสอบสิทธิ์

ADC จะค้นหาข้อมูลเข้าสู่ระบบตามลำดับในตำแหน่งต่อไปนี้

  1. ตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS
  2. ข้อมูลเข้าสู่ระบบของผู้ใช้ที่ตั้งค่าผ่าน Google Cloud CLI (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 ไปยัง Logger ที่มีระดับ CONFIG ขึ้นไป ตัวอย่างไฟล์ log4j2.xml ต่อไปนี้จะกำหนดค่า Logger ที่เขียนไปยัง 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