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, które implementują 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ąć wszelkie 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 zainicjuje 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 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.

Błędy, które mogą się pojawić:

  • 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 uwzględnia wersję adaptera w każdym żądaniu 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 wieloma wersjami pakietu SDK. Aby adapter działał z wieloma wersjami, sprawdź, czy zwracasz wersję środowiska wykonawczego pakietu SDK. W każdym żądaniu reklamy pakiet IMA SDK uwzględnia wersję środowiska wykonawczego wraz z wersją adaptera.

Poniższe przykłady żądają i zwracają wersję środowiska wykonawczego pakietu 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]);
  }
  ...

Rejestrowanie adaptera w Google

Aby Google mogło autoryzować adapter do zbierania sygnałów, musisz zarejestrować nazwę pakietu Androida 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 żądań reklam w aplikacji. Jeśli operacja się powiedzie, w każdym żądaniu reklamy zobaczysz sygnały.

Przeglądanie pełnych przykładów

W tej sekcji znajdziesz kompletny 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]);
  }
}