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

เลือกแพลตฟอร์ม: Android iOS

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

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

โปรดตรวจสอบว่าคุณมี IMA 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 จะเริ่มต้นอะแดปเตอร์แต่ละรายการ 1 ครั้งโดยเรียกใช้เมธอดการเริ่มต้นของอะแดปเตอร์ ใช้เมธอดนี้เพื่อเริ่มทรัพยากร Dependency การเข้ารหัส ตั้งค่าแคช หรือคำนวณสัญญาณล่วงหน้าซึ่งจะยังคงเหมือนเดิมในการเรียกใช้การรวบรวมสัญญาณทั้งหมด

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

  ...
  /**
   * 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 หลายเวอร์ชันได้ โปรดตรวจสอบว่าคุณได้แสดงผลเวอร์ชันรันไทม์ของ 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. เพิ่มทรัพยากร Dependency ของบิลด์ เช่น อะแดปเตอร์และ 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]);
  }
}