Tạo bộ chuyển đổi tín hiệu an toàn

Tín hiệu an toàn là dữ liệu được mã hoá mà thiết bị của ứng dụng thu thập và chia sẻ với một số bên đặt giá thầu. Trang này hướng dẫn bạn cách thu thập và gửi tín hiệu an toàn đến Google Ad Manager bằng cách sử dụng SDK Quảng cáo trên phương tiện truyền thông tương tác (IMA).

Trước khi bắt đầu

Trước khi tiếp tục, hãy xác minh rằng bạn có IMA SDK cho Android phiên bản 3.29.0 trở lên.

Tạo giao diện bộ chuyển đổi tín hiệu an toàn

Để thu thập và cung cấp tín hiệu an toàn, hãy tạo các lớp triển khai giao diện:

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() {
  }
}

Khởi chạy bộ chuyển đổi

SDK IMA khởi chạy từng bộ chuyển đổi một lần bằng cách gọi phương thức khởi chạy của bộ chuyển đổi. Triển khai phương thức này để bắt đầu mọi phần phụ thuộc mã hoá, thiết lập bộ nhớ đệm hoặc tính toán trước mọi tín hiệu vẫn giữ nguyên trong tất cả các lệnh gọi thu thập tín hiệu.

Ví dụ sau đây khởi chạy bộ chuyển đổi:

  ...
  /**
   * 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."));
  }
  ...

Thu thập tín hiệu

Trước khi yêu cầu quảng cáo bắt đầu, IMA SDK sẽ gọi một phương thức thu thập tín hiệu không đồng bộ. Các phương thức thu thập tín hiệu này chứa một hàm gọi lại để truyền các tín hiệu đã mã hoá hoặc báo cáo lỗi.

Các ví dụ sau đây thu thập tín hiệu an toàn thông qua hàm gọi lại:

  ...
  /**
   * 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);
    }
  }
  ...

Báo cáo lỗi

Để giao tiếp với những người dùng sử dụng lớp bộ chuyển đổi của bạn, hãy báo cáo tất cả lỗi trong quá trình thu thập tín hiệu và truyền các lỗi đó đến lệnh gọi lại của trình thu thập tín hiệu. Quy trình này khắc phục các vấn đề xảy ra trong quá trình tích hợp bộ chuyển đổi vào các ứng dụng.

Sau đây là những lỗi có thể xuất hiện:

  • Không tìm thấy SDK hoặc một phần phụ thuộc trong ứng dụng.
  • SDK hoặc một phần phụ thuộc của bạn không có quyền cần thiết hoặc sự đồng ý của người dùng để hoạt động.

Chỉ định phiên bản bộ chuyển đổi

Trong quy trình làm việc, hãy xác minh rằng bạn chỉ định phiên bản của bộ chuyển đổi. SDK IMA sẽ đưa phiên bản bộ chuyển đổi của bạn vào từng yêu cầu quảng cáo và truyền các phiên bản đó cùng với các tín hiệu an toàn trong một yêu cầu giá thầu.

Trong yêu cầu đặt giá thầu, dựa trên phiên bản bộ chuyển đổi, bạn có thể xác định thông tin chi tiết về hoạt động mã hoá, mã hoá và định dạng mà bộ chuyển đổi dùng để tạo các tín hiệu an toàn.

Ví dụ sau đây chỉ định phiên bản bộ chuyển đổi:

  ...
  /**
   * 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;
  }
  ...

Trả về phiên bản thời gian chạy SDK

Bạn có thể thiết kế bộ chuyển đổi để hoạt động với nhiều phiên bản SDK. Để bộ chuyển đổi hoạt động với nhiều phiên bản, hãy xác minh rằng bạn trả về phiên bản thời gian chạy của SDK. Trong mỗi yêu cầu quảng cáo, SDK IMA sẽ bao gồm phiên bản thời gian chạy cùng với phiên bản bộ chuyển đổi.

Các ví dụ sau đây yêu cầu và trả về phiên bản thời gian chạy 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]);
  }
  ...

Đăng ký đối tượng chuyển đổi với Google

Để Google uỷ quyền cho bộ chuyển đổi thu thập tín hiệu, bạn phải đăng ký tên gói Android hoặc với Google. SDK IMA chỉ khởi chạy những bộ chuyển đổi mà bạn đăng ký với Google.

Xác thực bộ chuyển đổi

Để xác thực bộ chuyển đổi, hãy hoàn tất các phần sau:

Định cấu hình ứng dụng kiểm thử

Trước khi bạn xác thực bộ chuyển đổi, hãy định cấu hình ứng dụng kiểm thử. Hoàn tất các bước sau:

  1. Thêm các phần phụ thuộc cho SDK IMA vào tệp Gradle cấp ứng dụng của mô-đun, chẳng hạn như app/build.gradle:

    dependencies {
      implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.29.0'
    }
    
  2. Thêm các phần phụ thuộc của bản dựng, chẳng hạn như bộ chuyển đổi và SDK.

Xác minh tín hiệu

Để xác minh rằng bộ chuyển đổi của bạn gửi tín hiệu, hãy sử dụng một proxy mạng để theo dõi lưu lượng truy cập yêu cầu quảng cáo của ứng dụng. Nếu thành công, bạn sẽ thấy các tín hiệu trong mỗi yêu cầu quảng cáo.

Xem các ví dụ đầy đủ

Phần này trình bày ví dụ hoàn chỉnh về tất cả các bước để bạn tham khảo.

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]);
  }
}