สร้างอะแดปเตอร์สัญญาณที่ปลอดภัย

สัญญาณที่ปลอดภัยคือข้อมูลที่เข้ารหัสซึ่งอุปกรณ์ไคลเอ็นต์รวบรวมและแชร์กับผู้เสนอราคาบางราย หน้านี้จะแนะนําการเก็บรวบรวมและส่งสัญญาณที่ปลอดภัยไปยัง Google Ad Manager โดยใช้ SDK โฆษณาสื่ออินเทอร์แอกทีฟ (IMA)

ก่อนเริ่มต้น

โปรดตรวจสอบว่าคุณมี IMG SDK สําหรับ Android เวอร์ชัน 3.29.0 ขึ้นไปก่อนดำเนินการต่อ

สร้างอินเทอร์เฟซอะแดปเตอร์สัญญาณที่ปลอดภัย

หากต้องการรวบรวมและส่งสัญญาณที่ปลอดภัย ให้สร้างคลาสที่ใช้อินเทอร์เฟซต่อไปนี้

package companydomain.path.to.securesignals;
import android.content.Context;
import androidx.annotation.Keep;
import com.google.ads.interactivemedia.v3.api.signals.SecureSignalsAdapter;

/**
 * An example implementation of Secure Signals adapter.
 */
@Keep
public final class MySecureSignalsAdapter implements SecureSignalsAdapter {
  /**
   * Default constructor with no arguments for IMA SDK to instantiate this class.
   */
  public MySecureSignalsAdapter() {
  }
}

เริ่มต้นอะแดปเตอร์

IMA SDK จะเริ่มต้นอะแดปเตอร์แต่ละรายการเพียงครั้งเดียวโดยการเรียกใช้เมธอดการเริ่มต้นของอะแดปเตอร์ ใช้เมธอดนี้เพื่อเริ่มการพึ่งพาการเข้ารหัส ตั้งค่าแคช หรือคํานวณสัญญาณใดๆ ล่วงหน้าซึ่งจะยังคงเหมือนเดิมในการเรียกคอลเล็กชันสัญญาณทั้งหมด

ตัวอย่างต่อไปนี้จะเริ่มต้นอะแดปเตอร์

  ...
  /**
   * Initialize your SDK and any dependencies.
   * IMA SDK calls this function exactly once before signal collection.
   *
   * @param context  The activity context that creates an ads loader.
   * @param callback A callback function to pass initialization results to IMA SDK.
   */
  @Override
  public void initialize(Context context, SecureSignalsInitializeCallback callback) {
    // Initialize your SDK and any dependencies.
    ...

    // Notify IMA SDK of initialization success.
    callback.onSuccess();

    // If signal collection fails, call callback.onFailure();
    // callback.onFailure(new Exception("Signal collection failed."));
  }
  ...

การรวบรวมสัญญาณ

ก่อนที่จะเริ่มคําขอโฆษณา IMA SDK จะเรียกใช้เมธอดรวบรวมสัญญาณแบบไม่สอดคล้องกัน เมธอดของผู้รวบรวมสัญญาณเหล่านี้มีฟังก์ชัน Callback เพื่อส่งสัญญาณที่เข้ารหัสหรือรายงานข้อผิดพลาด

ตัวอย่างต่อไปนี้จะรวบรวมสัญญาณที่ปลอดภัยผ่านฟังก์ชันการเรียกกลับ

  ...
  /**
   * Invokes your SDK to collect, encrypt and pass the signal collection results to IMA SDK.
   * IMA SDK calls this function before each ad request.
   *
   * @param context  The activity context that creates an ads loader.
   * @param callback A callback function to pass signal collection results to IMA SDK.
   */
  @Override
  public void collectSignals(Context context, SecureSignalsCollectSignalsCallback callback) {

    try {
      // Collect and encrypt the signals.
      String signals = ...;

      // Pass the encrypted signals to IMA SDK.
      callback.onSuccess(signals);
    } catch (Exception e) {
      // Pass signal collection failures to IMA SDK.
      callback.onFailure(e);
    }
  }
  ...

รายงานข้อผิดพลาด

หากต้องการสื่อสารกับผู้ใช้ที่ใช้คลาสอะแดปเตอร์ ให้รายงานข้อผิดพลาดทั้งหมดระหว่างการเก็บรวบรวมสัญญาณและส่งไปยังการเรียกกลับของเครื่องมือรวบรวมสัญญาณ กระบวนการนี้แก้ปัญหาที่เกิดขึ้นระหว่างการผสานรวมอะแดปเตอร์กับแอปพลิเคชัน

ข้อผิดพลาดที่อาจปรากฏขึ้นมีดังนี้

  • ไม่พบ SDK หรือ Dependency ของคุณในแอปพลิเคชัน
  • SDK หรือ Dependency ของคุณไม่มีสิทธิ์หรือความยินยอมของผู้ใช้ที่จําเป็นในการทำงาน

ระบุเวอร์ชันของอะแดปเตอร์

ในเวิร์กโฟลว์ โปรดตรวจสอบว่าคุณได้ระบุเวอร์ชันของอะแดปเตอร์ IMA SDK จะรวมเวอร์ชันอะแดปเตอร์ไว้ในคําขอโฆษณาแต่ละรายการ และส่งผ่านพร้อมกับสัญญาณที่ปลอดภัยในคําขอราคาเสนอ

ในคําขอราคาเสนอ คุณสามารถระบุรายละเอียดการเข้ารหัส การเข้ารหัส และการจัดรูปแบบที่แอดอะปเตอร์ใช้เพื่อสร้างสัญญาณที่ปลอดภัยโดยอิงตามเวอร์ชันของแอดอะปเตอร์

ตัวอย่างต่อไปนี้ระบุเวอร์ชันของอะแดปเตอร์

  ...
  /**
   * Specifies this adapter's version.
   */
  private static final VersionInfo AdapterVersion = new VersionInfo(1, 0, 1);
  ...
  /**
   * @return The version of this adapter.
   *         IMA SDK calls this function before each ad request.
   */
  @Override
  public VersionInfo getVersion() {
    return AdapterVersion;
  }
  ...

แสดงผลเวอร์ชันรันไทม์ของ SDK

คุณออกแบบอะแดปเตอร์ให้ทำงานร่วมกับ SDK หลายเวอร์ชันได้ โปรดตรวจสอบว่าคุณส่งคืน SDK เวอร์ชันรันไทม์เพื่อให้อะแดปเตอร์ทำงานร่วมกับหลายเวอร์ชันได้ ในคำขอโฆษณาแต่ละรายการ IMA SDK จะรวมเวอร์ชันรันไทม์ไว้กับเวอร์ชันอะแดปเตอร์

ตัวอย่างต่อไปนี้จะขอและแสดงผลเวอร์ชันรันไทม์ SDK

  ...
  /**
   * @return The version of your SDK that this adapter is depending on.
   *         IMA SDK calls this function before each ad request.
   */
  @Override
  public VersionInfo getSDKVersion() {
    // Request the version from your SDK and convert to an IMAVersion.
    int[] mySDKVersion = ...;

    return new VersionInfo(mySDKVersion[0], mySDKVersion[1], mySDKVersion[2]);
  }
  ...

ลงทะเบียนอะแดปเตอร์กับ Google

คุณต้องลงทะเบียนชื่อแพ็กเกจ Android หรือกับ Google เพื่อให้ Google อนุญาตให้อะแดปเตอร์รวบรวมสัญญาณได้ IMA SDK จะเริ่มต้นเฉพาะอะแดปเตอร์ที่คุณลงทะเบียนกับ Google เท่านั้น

ตรวจสอบอะแดปเตอร์

หากต้องการตรวจสอบอะแดปเตอร์ ให้กรอกข้อมูลในส่วนต่อไปนี้

กำหนดค่าแอปพลิเคชันทดสอบ

กำหนดค่าแอปพลิเคชันทดสอบก่อนตรวจสอบอะแดปเตอร์ ทําตามขั้นตอนต่อไปนี้

  1. เพิ่มทรัพยากร Dependency สําหรับ IMA SDK ลงในไฟล์ Gradle ระดับแอปของข้อบังคับ เช่น app/build.gradle

    dependencies {
      implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.29.0'
    }
    
  2. เพิ่มการพึ่งพิงบิวด์ เช่น อะแดปเตอร์และ SDK

ยืนยันสัญญาณ

หากต้องการยืนยันว่าอะแดปเตอร์ส่งสัญญาณ ให้ใช้พร็อกซีเครือข่ายเพื่อตรวจสอบการเข้าชมจากคําขอโฆษณาของแอปพลิเคชัน หากดำเนินการสำเร็จ คุณจะเห็นสัญญาณในคําขอโฆษณาแต่ละรายการ

ดูตัวอย่างทั้งหมด

ส่วนนี้จะแสดงตัวอย่างขั้นตอนทั้งหมดที่เสร็จสมบูรณ์และพร้อมให้คุณใช้อ้างอิง

package companydomain.path.to.securesignals;
import android.content.Context;
import androidx.annotation.Keep;
import com.google.ads.interactivemedia.v3.api.VersionInfo;
import com.google.ads.interactivemedia.v3.api.signals.SecureSignalsAdapter;
import com.google.ads.interactivemedia.v3.api.signals.SecureSignalsCollectSignalsCallback;
import com.google.ads.interactivemedia.v3.api.signals.SecureSignalsInitializeCallback;

/**
 * An example implementation of Secure Signals adapter.
 */
@Keep
public final class MySecureSignalsAdapter implements SecureSignalsAdapter {
  /**
   * Specifies this adapter's version.
   */
  private static final VersionInfo AdapterVersion = new VersionInfo(1, 0, 1);
  /**
   * Default constructor with no arguments for IMA SDK to instantiate this class.
   */
  public MySecureSignalsAdapter() {
  }
  /**
   * Initialize your SDK and any dependencies.
   * IMA SDK calls this function exactly once before signal collection.
   *
   * @param context  The activity context that creates an ads loader.
   * @param callback A callback function to pass initialization results to IMA SDK.
   */
  @Override
  public void initialize(Context context, SecureSignalsInitializeCallback callback) {
    try {
      // Initialize your SDK and any dependencies.
      ...

      // Notify IMA SDK of initialization success.
      callback.onSuccess();
    } catch (Exception e) {
      // Pass initialization failures to IMA SDK.
      callback.onFailure(e);
    }
  }
  /**
   * Invokes your SDK to collect, encrypt and send the signal collection results to IMA SDK.
   * IMA SDK calls this function before each ad request.
   *
   * @param context  The activity context that creates an ads loader.
   * @param callback A callback function to pass signal collection results to IMA SDK.
   */
  @Override
  public void collectSignals(Context context, SecureSignalsCollectSignalsCallback callback) {
    try {
      // Collect and encrypt the signals.
      String signals = ...;

      // Pass the encrypted signals to IMA SDK.
      callback.onSuccess(signals);
    } catch (Exception e) {
      // Pass signal collection failures to IMA SDK.
      callback.onFailure(e);
    }
  }
  /**
   * @return The version of this adapter.
   * IMA SDK calls this function before each ad request.
   */
  @Override
  public VersionInfo getVersion() {
    return AdapterVersion;
  }
  /**
   * @return The version of your SDK that this adapter is depending on.
   * IMA SDK calls this function before each ad request.
   */
  @Override
  public VersionInfo getSDKVersion() {
    // Request the version from your SDK and convert to an IMAVersion.
    int[] mySDKVersion = ...;
    return new VersionInfo(mySDKVersion[0], mySDKVersion[1], mySDKVersion[2]);
  }
}