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