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

Tín hiệu bảo mật là dữ liệu được mã hoá mà thiết bị khách 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 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 đảm bảo bạn có SDK IMA 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 sẽ 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 một yêu cầu quảng cáo bắt đầu, SDK IMA sẽ gọi một phương thức thu thập tín hiệu một cách 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 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ả các lỗi trong bộ sưu tập tín hiệu và truyền chúng đến lệnh gọi lại trình thu thập tín hiệu. Quy trình này khắc phục các sự cố xảy ra trong quá trình tích hợp bộ chuyển đổi vào ứng dụng.

Các lỗi có thể xuất hiện như sau:

  • Không tìm thấy SDK hoặc phần phụ thuộc của bạn trong ứng dụng.
  • SDK hoặc 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 đảm bảo bạn chỉ định phiên bản của bộ chuyển đổi. SDK IMA bao gồm phiên bản bộ chuyển đổi của bạn trong mỗi 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 bảo mật trong yêu cầu giá thầu.

Trong yêu cầu giá thầu, dựa trên phiên bản bộ chuyển đổi, bạn có thể xác định các chi tiết về mã hoá, định dạng và định dạng mà bộ chuyển đổi sử dụng để tạo 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. Để trình chuyển đổi hoạt động với nhiều phiên bản, hãy đảm bảo 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 bao gồm phiên bản thời gian chạy 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ý bộ chuyển đổi với Google

Để Google cho phép 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 xác thực bộ chuyển đổi, hãy định cấu hình ứng dụng kiểm thử. Hoàn thành 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 bạn 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 của bạn.

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 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 tín hiệu trong mỗi yêu cầu quảng cáo.

Xem xét 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 và có sẵn cho tham chiếu.

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