Sichere Signale sind codierte Daten, die ein Clientgerät erhebt und für ausgewählte Bieter freigibt. Auf dieser Seite erfahren Sie, wie Sie mit dem IMA SDK (Interactive Media Ads) sichere Signale erfassen und an Google Ad Manager senden.
Hinweis
Prüfen Sie, ob Sie das IMA SDK für Android in Version 3.29.0 oder höher haben, bevor Sie fortfahren.
Schnittstelle für den Adapter für sichere Signale erstellen
Wenn Sie sichere Signale erfassen und bereitstellen möchten, erstellen Sie Klassen, die die Schnittstelle implementieren:
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() {
}
}
Adapter initialisieren
Das IMA SDK initialisiert jeden Adapter einmal, indem es die Initialisierungsmethode des Adapters aufruft. Implementieren Sie diese Methode, um Verschlüsselungsabhängigkeiten zu starten, Caches einzurichten oder Signale vorab zu berechnen, die bei allen Aufrufen zur Signalerfassung gleich bleiben.
Im folgenden Beispiel wird der Adapter initialisiert:
...
/**
* 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."));
}
...
Signalerfassung
Bevor eine Anzeigenanfrage initiiert wird, ruft das IMA SDK asynchron eine Methode zum Erfassen von Signalen auf. Diese Signal Collector-Methoden enthalten eine Callback-Funktion, um die verschlüsselten Signale zu übergeben oder einen Fehler zu melden.
In den folgenden Beispielen werden die sicheren Signale über die Callback-Funktion erfasst:
...
/**
* 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);
}
}
...
Berichtsfehler
Wenn Sie mit Nutzern kommunizieren möchten, die Ihre Adapterklasse verwenden, melden Sie alle Fehler während der Signalerfassung und übergeben Sie sie an den Callback des Signal Collectors. Mit diesem Prozess werden Probleme behoben, die bei der Integration des Adapters in Anwendungen auftreten.
Folgende Fehler können auftreten:
- Ihr SDK oder eine Abhängigkeit wurde in der Anwendung nicht gefunden.
- Ihr SDK oder eine Abhängigkeit hat nicht die erforderliche Berechtigung oder Nutzereinwilligung, um zu funktionieren.
Adapterversion angeben
Prüfen Sie, ob Sie in Ihrem Workflow die Version des Adapters angeben. Das IMA SDK enthält die Adapterversion in jeder Anzeigenanfrage und übergibt sie mit den sicheren Signalen in einer Gebotsanfrage.
In der Gebotsanfrage können Sie anhand der Adapterversion die Verschlüsselungs-, Codierungs- und Formatierungsdetails ermitteln, die der Adapter zum Erstellen der sicheren Signale verwendet.
Im folgenden Beispiel wird die Adapterversion angegeben:
...
/**
* 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;
}
...
SDK-Laufzeitversion zurückgeben
Sie können Ihren Adapter so entwerfen, dass er mit mehreren Versionen Ihres SDK funktioniert. Damit der Adapter mit mehreren Versionen funktioniert, müssen Sie die Laufzeitversion des SDK zurückgeben. In jeder Anzeigenanfrage enthält das IMA SDK die Laufzeitversion mit der Adapterversion.
In den folgenden Beispielen wird die SDK-Laufzeitversion angefordert und zurückgegeben:
...
/**
* @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]);
}
...
Adapter bei Google registrieren
Damit Google den Adapter für die Signalerfassung autorisieren kann, müssen Sie den Android-Paketnamen bei Google registrieren. Das IMA SDK initialisiert nur die Adapter, die Sie bei Google registrieren.
Adapter validieren
Führen Sie die Schritte in den folgenden Abschnitten aus, um den Adapter zu validieren:
Testanwendung konfigurieren
Bevor Sie den Adapter validieren, müssen Sie die Testanwendung konfigurieren. Gehen Sie folgendermaßen vor:
Fügen Sie der Gradle-Datei Ihres Moduls auf App-Ebene, z. B.
app/build.gradle, die Abhängigkeiten für das IMA SDK hinzu:dependencies { implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.29.0' }Fügen Sie Build-Abhängigkeiten hinzu, z. B. Ihren Adapter und Ihr SDK.
Signale überprüfen
Wenn Sie prüfen möchten, ob Ihr Adapter Signale sendet, können Sie den Traffic von Anzeigenanfragen Ihrer Anwendung mit einem Netzwerkproxy überwachen. Wenn dies erfolgreich ist, werden die Signale in jeder Anzeigenanfrage angezeigt.
Vollständige Beispiele ansehen
In diesem Abschnitt finden Sie ein vollständiges Beispiel für alle Schritte, das Sie als Referenz verwenden können.
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]);
}
}