Tworzenie adaptera bezpiecznych sygnałów

Wybierz platformę: Android iOS

Bezpieczne sygnały to zakodowane dane, które urządzenie klienta zbiera i udostępnia wybranym licytującym. Na tej stronie dowiesz się, jak zbierać i wysyłać bezpieczne sygnały do Google Ad Manager za pomocą pakietu Interactive Media Ads (IMA) SDK.

Zanim zaczniesz

Zanim przejdziesz dalej, sprawdź, czy masz pakiet IMA SDK na Androida w wersji 3.29.0 lub nowszej.

Tworzenie interfejsu adaptera bezpiecznych sygnałów

Aby zbierać i udostępniać bezpieczne sygnały, utwórz klasy implementujące interfejs:

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

Inicjowanie adaptera

Pakiet IMA SDK inicjuje każdy adapter raz, wywołując metodę inicjowania adaptera. Zaimplementuj tę metodę, aby rozpocząć korzystanie z zależności szyfrowania, skonfigurować pamięć podręczną lub wstępnie obliczyć sygnały, które pozostają takie same we wszystkich wywołaniach zbierania sygnałów.

Poniższy przykład inicjuje adapter:

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

Zbieranie sygnałów

Zanim rozpocznie się żądanie reklamy, pakiet IMA SDK asynchronicznie wywołuje metodę zbierania sygnałów. Te metody zbierania sygnałów zawierają funkcję zwrotną, która przekazuje zaszyfrowane sygnały lub zgłasza błąd.

Poniższe przykłady zbierają bezpieczne sygnały za pomocą funkcji zwrotnej:

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

Zgłaszanie błędów

Aby komunikować się z użytkownikami, którzy korzystają z Twojej klasy adaptera, zgłaszaj wszystkie błędy podczas zbierania sygnałów i przekazuj je do funkcji zwrotnej zbierania sygnałów. Ten proces pomaga rozwiązywać problemy, które występują podczas integracji adaptera z aplikacjami.

Mogą pojawić się te błędy:

  • Pakiet SDK lub zależność nie zostały znalezione w aplikacji.
  • Pakiet SDK lub zależność nie mają wymaganych uprawnień ani zgody użytkownika.

Określanie wersji adaptera

W swoim procesie sprawdź, czy określasz wersję adaptera. Pakiet IMA SDK dołącza wersję adaptera do każdego żądania reklamy i przekazuje ją wraz z bezpiecznymi sygnałami w pytaniu o stawkę.

W pytaniu o stawkę na podstawie wersji adaptera możesz określić szczegóły szyfrowania, kodowania i formatowania, których adapter używa do tworzenia bezpiecznych sygnałów.

Poniższy przykład określa wersję adaptera:

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

Zwracanie wersji środowiska wykonawczego pakietu SDK

Możesz zaprojektować adapter tak, aby działał z różnymi wersjami pakietu SDK. Aby adapter działał z różnymi wersjami, sprawdź, czy zwracasz wersję środowiska wykonawczego pakietu SDK. W każdym żądaniu reklamy pakiet IMA SDK dołącza wersję środowiska wykonawczego wraz z wersją adaptera.

Poniższe przykłady wysyłają żądanie wersji środowiska wykonawczego pakietu SDK i ją zwracają:

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

Rejestrowanie adaptera w Google

Aby Google mogło autoryzować adapter do zbierania sygnałów, musisz zarejestrować nazwę pakietu Androida lub w Google. Pakiet IMA SDK inicjuje tylko te adaptery, które zarejestrujesz w Google.

Sprawdzanie poprawności adaptera

Aby sprawdzić poprawność adaptera, wykonaj czynności opisane w tych sekcjach:

Konfigurowanie aplikacji testowej

Zanim sprawdzisz poprawność adaptera, skonfiguruj aplikację testową. Wykonaj te czynności:

  1. Dodaj zależności pakietu IMA SDK do pliku Gradle na poziomie aplikacji modułu, np. app/build.gradle:

    dependencies {
      implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.29.0'
    }
    
  2. Dodaj zależności kompilacji, takie jak adapter i pakiet SDK.

Sprawdzanie sygnałów

Aby sprawdzić, czy adapter wysyła sygnały, użyj serwera proxy sieci, aby monitorować ruch związany z żądaniami reklam w aplikacji. Jeśli operacja się powiedzie, w każdym żądaniu reklamy zobaczysz sygnały.

Przeglądanie pełnych przykładów

Ta sekcja zawiera pełny przykład wszystkich kroków, który możesz wykorzystać jako materiał referencyjny.

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