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. Z tej strony dowiesz się, jak zbierać i wysyłać bezpieczne sygnały do Google Ad Managera za pomocą pakietu Interactive Media Ads SDK (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 bezpiecznego sygnału

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 jego metodę inicjowania. Zaimplementuj tę metodę, aby rozpocząć wszelkie zależności związane z szyfrowaniem, skonfigurować pamięć podręczną lub wstępnie obliczyć sygnały, które pozostają takie same we wszystkich wywołaniach zbierania sygnałów.

Ten 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

Przed zainicjowaniem żądania reklamy pakiet IMA SDK wywołuje asynchronicznie metodę zbierania sygnałów. Te metody zbierania sygnałów zawierają funkcję wywołania zwrotnego, która przekazuje zaszyfrowane sygnały lub zgłasza błąd.

W tych przykładach bezpieczne sygnały są zbierane za pomocą funkcji wywołania zwrotnego:

  ...
  /**
   * 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 wywołania zwrotnego zbieracza sygnałów. Ten proces pomaga rozwiązywać problemy, które występują podczas integrowania adaptera z aplikacjami.

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

  • W aplikacji nie znaleziono pakietu SDK ani zależności.
  • Twój pakiet SDK lub zależność nie ma wymaganych uprawnień ani zgody użytkownika na działanie.

Określanie wersji adaptera

Sprawdź, czy w przepływie pracy podajesz wersję adaptera. Pakiet IMA SDK zawiera w każdym żądaniu reklamy wersję Twojego adaptera 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.

W przykładzie poniżej określono 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ę pakietu SDK w czasie działania. W każdym żądaniu reklamy pakiet IMA SDK zawiera wersję środowiska wykonawczego z wersją adaptera.

W przykładach poniżej wysyłane jest żądanie i zwracana jest wersja ś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]);
  }
  ...

Zarejestruj adapter w Google

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

Sprawdzanie ładowarki

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

Konfigurowanie aplikacji testowej

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

  1. Dodaj zależności dla 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.

Weryfikowanie sygnałów

Aby sprawdzić, czy adapter wysyła sygnały, użyj serwera proxy sieci, aby monitorować ruch żądań reklamy w aplikacji. Jeśli się to uda, w każdym żądaniu reklamy zobaczysz sygnały.

Sprawdź kompletne przykłady

Ta sekcja zawiera kompletny przykład wszystkich kroków, który możesz wykorzystać jako punkt odniesienia.

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