Beim Lesen der Privacy Sandbox für Android Dokumentation auswählen, klicken Sie auf die Schaltfläche Vorschau für Entwickler oder Beta, um Programmversion, mit der Sie arbeiten, da die Anleitung variieren kann.
Die Protected Audience API unter Android (früher FLEDGE) enthält die Custom Audience API und Ad Selection API AdTech-Plattformen und Werbetreibende können diese APIs verwenden, um interessenspezifische Anzeigen auf der Grundlage vorheriger App-Interaktionen auszuliefern, die schränkt die Freigabe von Kennungen für mehrere Apps ein und beschränkt die Freigabe der App eines Nutzers mit Dritten interagieren.
Die Custom Audience API befasst sich mit der „benutzerdefinierten Zielgruppe“ Abstraktion, die eine Gruppe von Nutzenden mit gemeinsamen Absichten repräsentiert. Eine Werbetreibende können Nutzer für eine benutzerdefinierte Zielgruppe registrieren und ihnen relevante Anzeigen zuordnen. damit nichts. Diese Informationen werden lokal gespeichert und können verwendet werden, um Werbetreibende Gebote, Anzeigenfilterung und Anzeigen-Rendering.
Die Ad Selection API bietet ein Framework, mit dem mehrere Entwickler für eine benutzerdefinierte Zielgruppe lokal eine Auktion durchführen. Um dies zu erreichen, berücksichtigt relevante Anzeigen, die mit der benutzerdefinierten Zielgruppe verknüpft sind, und erzielt eine zusätzliche Verarbeitung von Anzeigen, die von einer Anzeigentechnologie-Plattform an das Gerät zurückgegeben werden.
AdTech-Plattformen können diese APIs integrieren, um Remarketing zu implementieren, schützt die Privatsphäre der Nutzer. Unterstützung für weitere Anwendungsfälle, einschließlich App-Installation sind für zukünftige Versionen geplant. Weitere Informationen zu Protected Audience API für Android im Designvorschlag
In diesem Leitfaden wird beschrieben, wie Sie mit der Protected Audience API unter Android Gehen Sie so vor:
- Benutzerdefinierte Zielgruppen verwalten
- Anzeigenauswahl auf einem Gerät einrichten und ausführen
- Berichte zu Anzeigenimpressionen erstellen
Hinweis
Bevor Sie beginnen, führen Sie die folgenden Schritte aus:
- Richten Sie Ihre Entwicklungsumgebung für die Privacy Sandbox für Android ein.
- Installieren Sie entweder ein System-Image auf einem unterstützten Gerät oder richten Sie ein Emulator, der die Privacy Sandbox für Android unterstützt.
Aktivieren Sie in einem Terminal den Zugriff auf die Protected Audience API (deaktiviert). standardmäßig) mit dem folgenden adb-Befehl.
adb shell device_config put adservices ppapi_app_allow_list \"*\"
ACCESS_ADSERVICES_CUSTOM_AUDIENCE
-Berechtigung in deine App einbinden Manifest:<uses-permission android:name="android.permission.ACCESS_ADSERVICES_CUSTOM_AUDIENCE" />
Verweisen Sie im
<application>
-Element von Ihr Manifest:<property android:name="android.adservices.AD_SERVICES_CONFIG" android:resource="@xml/ad_services_config" />
Gib die XML-Ressource für die Anzeigendienste an, auf die in deinem Manifest verwiesen wird, z. B.:
res/xml/ad_services_config.xml
Weitere Informationen zu Berechtigungen für Werbedienste und die SDK-Zugriffssteuerung.<ad-services-config> <custom-audiences allowAllToAccess="true" /> </ad-services-config>
Standardmäßig erzwingt die Ad Selection API Beschränkungen auf die maximale Speichermenge, die bei einer Auktions- oder Impression-Berichterstellung das Skript zuweisen kann. Für die Funktion zur Arbeitsspeicherbeschränkung ist eine WebView-Version erforderlich 105.0.5195.58 oder höher. Die Plattform erzwingt eine Versionsprüfung und ruft Die APIs
selectAds
undreportImpression
schlagen fehl, wenn dies nicht zufrieden ist. Es gibt zwei Möglichkeiten, dies einzurichten:Option 1: Deaktivieren Sie diese Prüfung mit dem folgenden adb-Befehl:
adb device_config put fledge_js_isolate_enforce_max_heap_size false
Option 2: WebView Beta aus dem Google Play Store installieren Dies muss gleich oder höher als die zuvor angegebene Version ist.
Einer benutzerdefinierten Zielgruppe beitreten
Eine benutzerdefinierte Zielgruppe ist eine Gruppe von Nutzern mit gemeinsamen Absichten oder Interessen, die von der App des Werbetreibenden festgelegt wurden. Eine App oder ein SDK kann eine benutzerdefinierte Zielgruppe angeben, um eine bestimmte Zielgruppe anzugeben, z. B. eine Person, die Artikel verlassen hat. im Einkaufswagen. Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte Zielgruppe asynchron zu erstellen oder hinzuzufügen: Folgendes:
- Initialisieren Sie das Objekt
CustomAudienceManager
. - Erstellen Sie ein
CustomAudience
-Objekt, indem Sie Schlüsselparameter wie das Paket des Käufers und einen relevanten Namen. Initialisieren Sie dann die ObjektJoinCustomAudienceRequest
durchCustomAudience
-Objekt enthält. - Rufen Sie den asynchronen
joinCustomAudience()
mit der Methode ObjektJoinCustomAudienceRequest
und relevanteExecutor
undOutcomeReceiver
-Objekte.
Kotlin
val customAudienceManager: CustomAudienceManager =
context.getSystemService(CustomAudienceManager::class.java)
// Initialize a custom audience.
val audience = CustomAudience.Builder()
.setBuyer(buyer)
.setName(name)
...
.build()
// Initialize a custom audience request.
val joinCustomAudienceRequest: JoinCustomAudienceRequest =
JoinCustomAudienceRequest.Builder().setCustomAudience(audience).build()
// Request to join a custom audience.
customAudienceManager.joinCustomAudience(joinCustomAudienceRequest,
executor,
outcomeReceiver)
Java
CustomAudienceManager customAudienceManager =
context.getSystemService(CustomAudienceManager.class);
// Initialize a custom audience.
CustomAudience audience = new CustomAudience.Builder()
.setBuyer(buyer)
.setName(name)
...
.build();
// Initialize a custom audience request.
JoinCustomAudienceRequest joinCustomAudienceRequest =
new JoinCustomAudienceRequest.Builder().setCustomAudience(audience).build();
// Request to join a custom audience.
customAudienceManager.joinCustomAudience(joinCustomAudienceRequest,
executor,
outcomeReceiver);
Durch die Kombination der folgenden Parameter werden die einzelnen Parameter
CustomAudience
-Objekt auf einem Gerät:
owner
: Paketname der Eigentümer-App. Dies ist implizit auf den Wert Paketname der Anrufer-App.buyer
: ID für das Werbenetzwerk des Käufers, über das Anzeigen für dieses benutzerdefinierte Targeting verwaltet werden Zielgruppe.name
: Ein beliebiger Name oder eine beliebige Kennung für die benutzerdefinierte Zielgruppe.
Wiederholter Aufruf von joinCustomAudience()
mit einer anderen Instanz von
CustomAudience
aktualisiert alle vorhandenen CustomAudience
mit
entspricht den Parametern owner, buyer
und name
. Zur Wahrung des Datenschutzes
-Ergebnis der API nicht zwischen „Erstellung“ und „Aktualisieren“.
Außerdem muss die CustomAudience
mit diesen erforderlichen
Parameter:
- URL für tägliche Updates: Eine HTTPS-URL, die täglich im Hintergrund abgefragt wird. Gebotssignale von Nutzern, Daten zu vertrauenswürdigen Geboten einer benutzerdefinierten Zielgruppe aktualisieren Sie können URLs und Metadaten für Anzeigen rendern.
- Gebotslogik-URL: Eine HTTPS-URL, die während der Anzeigenauswahl abgefragt wird, um ein JavaScript-Gebotslogik des Käufers. Erforderliche Funktionssignaturen in diesem JavaScript.
- Anzeigen-Rendering-IDs: Eine beliebige ID, die von der Anzeigentechnologie des Käufers festgelegt wird. Dies ist ein Optimierung zum Generieren der Nutzlast für B&A.
Optionale Parameter für ein CustomAudience
-Objekt können Folgendes umfassen:
- Aktivierungszeit: Eine benutzerdefinierte Zielgruppe kann nur an der Anzeigenauswahl teilnehmen. und tägliche Updates nach der Aktivierung. Dies kann nützlich sein, um inaktive Nutzer einer App.
- Ablaufzeit: Eine Zeit, nach der die benutzerdefinierte Zielgruppe in der Zukunft liegt. vom Gerät entfernt.
- Gebotssignale von Nutzern: Ein JSON-String mit Nutzersignalen wie dem dem bevorzugten Gebietsschema des Nutzers, das vom JavaScript für die Gebotslogik eines Käufers genutzt wird zum Generieren von Geboten bei der Anzeigenauswahl. Dieses Format hilft AdTech Plattformen können Code plattformübergreifend wiederverwenden und vereinfachen die Verwendung von JavaScript Funktionen.
- Daten zu vertrauenswürdigen Geboten: Eine HTTPS-URL und eine Liste von Strings, die während der Anzeigenauswahlprozess, bei dem Gebotssignale von einem vertrauenswürdigen Schlüssel/Wert-Paar abgerufen werden .
- Ads (Anzeigen): Eine Liste von
AdData
-Objekten, die den Anzeigen entsprechen, die an der Anzeigenauswahl mitwirken. JedesAdData
-Objekt besteht aus folgenden Elementen: <ph type="x-smartling-placeholder">- </ph>
- Rendering-URL: Eine HTTPS-URL, die zum Rendern der endgültigen Anzeige abgefragt wird.
- Metadaten: Ein JSON-Objekt, das als String serialisiert ist und Informationen zum bei der Anzeigenauswahl von der Gebotslogik des Käufers übernommen werden.
- Anzeigenfilter: Klasse, die alle erforderlichen Informationen für Apps enthält Anzeigenfilterung und Frequency Capping bei der Anzeigenauswahl installieren
Hier ein Beispiel für eine Instanziierung des CustomAudience
-Objekts:
Kotlin
// Minimal initialization of a CustomAudience object
val customAudience: CustomAudience = CustomAudience.Builder()
.setBuyer(AdTechIdentifier.fromString("my.buyer.domain.name"))
.setName("example-custom-audience-name")
.setDailyUpdateUrl(Uri.parse("https://DAILY_UPDATE_URL"))
.setBiddingLogicUrl(Uri.parse("https://BIDDING_LOGIC_URL"))
.build()
Java
// Minimal initialization of a CustomAudience object
CustomAudience customAudience = CustomAudience.Builder()
.setBuyer(AdTechIdentifier.fromString("my.buyer.domain.name"))
.setName("example-custom-audience-name")
.setDailyUpdateUrl(Uri.parse("https://DAILY_UPDATE_URL"))
.setBiddingLogicUrl(Uri.parse("https://BIDDING_LOGIC_URL"))
.build();
JoinCustomAudience()-Ergebnisse verarbeiten
Die asynchrone Methode joinCustomAudience()
verwendet die Methode OutcomeReceiver
.
, um das Ergebnis des API-Aufrufs zu signalisieren.
- Der
onResult()
-Callback zeigt an, dass die benutzerdefinierte Zielgruppe erfolgreich war. erstellt oder aktualisiert wurde. - Der
onError()
-Callback zeigt zwei mögliche Bedingungen an.- Wenn
JoinCustomAudienceRequest
mit einem ungültigen Wert initialisiert wird Argumente, stehtAdServicesException
für einIllegalArgumentException
als Ursache. - Bei allen anderen Fehlern wird ein
AdServicesException
mit einemIllegalStateException
als Ursache.
- Wenn
Hier ein Beispiel für die Verarbeitung des Ergebnisses von joinCustomAudience()
:
Kotlin
var callback: OutcomeReceiver<Void, AdServicesException> =
object : OutcomeReceiver<Void, AdServicesException> {
override fun onResult(result: Void) {
Log.i("CustomAudience", "Completed joinCustomAudience")
}
override fun onError(error: AdServicesException) {
// Handle error
Log.e("CustomAudience", "Error executing joinCustomAudience", error)
}
};
Java
OutcomeReceiver callback = new OutcomeReceiver<Void, AdServicesException>() {
@Override
public void onResult(@NonNull Void result) {
Log.i("CustomAudience", "Completed joinCustomAudience");
}
@Override
public void onError(@NonNull AdServicesException error) {
// Handle error
Log.e("CustomAudience", "Error executing joinCustomAudience", error);
}
};
Benutzerdefinierte Zielgruppe verlassen
Wenn der User die Geschäftskriterien für einen benutzerdefinierten
kann eine App oder ein SDK leaveCustomAudience()
aufrufen, um die benutzerdefinierte
vom Gerät aus. So entfernen Sie ein CustomAudience
basierend auf seinem eindeutigen
gehen Sie so vor:
- Initialisieren Sie das Objekt
CustomAudienceManager
. LeaveCustomAudienceRequest
mit denbuyer
undname
. Weitere Informationen zu diesen Eingabefeldern finden Sie unter Einer benutzerdefinierten Zielgruppe beitreten:- Rufen Sie die asynchrone
leaveCustomAudience()
-Methode mit dem ObjektLeaveCustomAudienceRequest
und relevanteExecutor
undOutcomeReceiver
-Objekte.
Kotlin
val customAudienceManager: CustomAudienceManager =
context.getSystemService(CustomAudienceManager::class.java)
// Initialize a LeaveCustomAudienceRequest
val leaveCustomAudienceRequest: LeaveCustomAudienceRequest =
LeaveCustomAudienceRequest.Builder()
.setBuyer(buyer)
.setName(name)
.build()
// Request to leave a custom audience
customAudienceManager.leaveCustomAudience(
leaveCustomAudienceRequest,
executor,
outcomeReceiver)
Java
CustomAudienceManager customAudienceManager =
context.getSystemService(CustomAudienceManager.class);
// Initialize a LeaveCustomAudienceRequest
LeaveCustomAudienceRequest leaveCustomAudienceRequest =
new LeaveCustomAudienceRequest.Builder()
.setBuyer(buyer)
.setName(name)
.build();
// Request to leave a custom audience
customAudienceManager.leaveCustomAudience(
leaveCustomAudienceRequest,
executor,
outcomeReceiver);
Ähnlich wie beim Aufrufen von joinCustomAudience()
werden auch die OutcomeReceiver
-Signale
das Ende eines API-Aufrufs. Aus Datenschutzgründen muss ein Fehlerergebnis
zwischen internen Fehlern und ungültigen Argumenten unterscheiden können. Das onResult()
Callback wird aufgerufen, wenn der API-Aufruf abgeschlossen ist, unabhängig davon, ob ein übereinstimmender
benutzerdefinierte Zielgruppe wurde entfernt.
Anzeigenauswahl ausführen
Wenn Sie die Protected Audience API zur Anzeigenauswahl verwenden möchten, rufen Sie die Methode selectAds()
auf:
- Initialisieren Sie ein
AdSelectionManager
-Objekt. - Erstellen Sie ein
AdSelectionConfig
-Objekt. - Rufen Sie die asynchrone
selectAds()
-Methode mit dem ObjektAdSelectionConfig
und relevanteExecutor
undOutcomeReceiver
-Objekte.
Kotlin
val adSelectionManager: AdSelectionManager =
context.getSystemService(AdSelectionManager::class.java)
// Initialize AdSelectionConfig
val adSelectionConfig: AdSelectionConfig =
AdSelectionConfig.Builder().setSeller(seller)
.setDecisionLogicUrl(decisionLogicUrl)
.setCustomAudienceBuyers(customAudienceBuyers)
.setAdSelectionSignals(adSelectionSignals)
.setSellerSignals(sellerSignals)
.setPerBuyerSignals(perBuyerSignals)
.setBuyerContextualAds(
Collections.singletonMap(
contextualAds.getBuyer(), contextualAds
)
).build()
// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
adSelectionConfig, executor, outcomeReceiver
)
Java
AdSelectionManager adSelectionManager =
context.getSystemService(AdSelectionManager.class);
// Initialize AdSelectionConfig
AdSelectionConfig adSelectionConfig =
new AdSelectionConfig.Builder()
.setSeller(seller)
.setDecisionLogicUrl(decisionLogicUrl)
.setCustomAudienceBuyers(customAudienceBuyers)
.setAdSelectionSignals(adSelectionSignals)
.setSellerSignals(sellerSignals)
.setPerBuyerSignals(perBuyerSignals)
.setBuyerContextualAds(
Collections.singletonMap(contextualAds.getBuyer(), contextualAds)
)
.build();
// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(adSelectionConfig, executor, outcomeReceiver);
Die Methode selectAds()
erfordert eine AdSelectionConfig
-Eingabe, wobei
müssen Sie die folgenden erforderlichen Parameter angeben:
- Verkäufer: ID des Verkäufer-Werbenetzwerks, mit dem die Anzeigenauswahl initiiert wird.
- URL für die Entscheidungslogik: Eine HTTPS-URL, die abgefragt wird, um die ID des Werbenetzwerks des Verkäufers zu erhalten.
JavaScript-Logik.
- HTTPS-URL: Wird abgefragt, um die JavaScript-Logik des Verkäufer-Werbenetzwerks zu erhalten. Erforderliche Funktionssignaturen
- Vordefinierter URI: Dieser URI entspricht dem FLEDGE-Anzeigenauswahlformat.
IllegalArgumentException
wird ausgelöst, wenn ein nicht unterstütztes oder fehlerhaftes Format vorliegt. wird ein vorkonfigurierter URI übergeben.
- Käufer von benutzerdefinierten Zielgruppen: vollständige Liste der Kennungen für Werbenetzwerke des Käufers
die der Verkäufer zur Teilnahme an der Anzeigenauswahl berechtigt.
Diese Käufer-IDs entsprechen
CustomAudience.getBuyer()
der teilnehmenden benutzerdefinierten Zielgruppen.
Die folgenden Parameter können optional für eine benutzerdefinierte Anzeige angegeben werden. Auswahl:
- Signale für die Anzeigenauswahl: Ein JSON-Objekt, serialisiert als String, das
Signale, die von der Gebotslogik des Käufers konsumiert werden, die vom JavaScript abgerufen wird
CustomAudience.getBiddingLogicUrl()
- Verkäufersignale: Ein JSON-Objekt, das als String serialisiert ist und Signale enthält.
der vom Verkäufer abgerufenen JavaScript-Entscheidungslogik
AdSelectionConfig.getDecisionLogicUrl()
- Signale pro Käufer: Eine Zuordnung von JSON-Objekten, serialisiert als Strings
mit Signalen, die von bestimmten Käufern JavaScript für die Gebotslogik
abgerufenen Daten aus
CustomAudience.getBiddingLogicUrl()
, die durch in die Käuferfelder der teilnehmenden benutzerdefinierten Zielgruppen ein. - Kontextbezogene Anzeigen:Eine Sammlung von Anzeigenkandidaten, die direkt erfasst werden von Käufern während einer Auktion, die außerhalb einer geschützten Zielgruppe stattfindet Auktion.
Nachdem eine Anzeige ausgewählt wurde, bleiben die Ergebnisse, Gebote und Signale intern erhalten.
für die Berichterstellung. Der OutcomeReceiver.onResult()
-Callback gibt ein
AdSelectionOutcome
mit:
- Eine Rendering-URL für die erfolgreiche Anzeige, die von
AdData.getRenderUrl()
abgerufen wurde. - Eine eindeutige Anzeigenauswahl-ID für den Gerätenutzer. Diese ID wird für Berichte verwendet die Anzeigenimpression.
Wenn die Anzeigenauswahl aus folgenden Gründen nicht abgeschlossen werden kann:
ungültige Argumente, Zeitüberschreitungen oder einen übermäßigen Ressourcenverbrauch,
Der OutcomeReceiver.onError()
-Callback liefert ein AdServicesException
-Element
mit den folgenden Verhaltensweisen:
- Wenn die Anzeigenauswahl mit ungültigen Argumenten initiiert wird,
AdServicesException
zeigt einIllegalArgumentException
als Ursache. - Bei allen anderen Fehlern wird ein
AdServicesException
mit einemIllegalStateException
als Ursache.
Kontextbasierte Anzeigen
Protected Audience kann kontextbezogene Anzeigen in eine Protected Auktion einbinden.
Auf dem AdTech-Server müssen kontextbezogene Anzeigen ausgewählt und an den
Geräte außerhalb der Protected Audience APIs. Kontextbezogene Anzeigen können dann
in der Auktion mit dem AdSelectionConfig
an. An diesem Punkt
Wie bei Anzeigen auf dem Gerät, einschließlich Eignung für die ausschließende Anzeigenfilterung. Sobald die
Die Protected Audience-Auktion ist abgeschlossen. Sie müssen Folgendes aufrufen:
reportImpression()
Dadurch wird reportWin()
in der erfolgreichen kontextbezogenen Anzeige aufgerufen.
dieselben Muster wie bei den Impressionsberichten,
. Jede kontextbezogene Anzeige benötigt einen Käufer, ein Gebot, einen Link zur Berichterstellungslogik,
Rendering-URL und Anzeigenmetadaten.
Zum Bereitstellen kontextbezogener Anzeigen in der App muss die Ziel-App ein
Objekt ContextualAds
:
Kotlin
val contextualAds: ContextualAds =
Builder().setBuyer(AdTechIdentifier.fromString(mBiddingLogicUri.getHost()))
//Pass in your valid app install ads
.setDecisionLogicUri(mContextualLogicUri)
.setAdsWithBid(appInstallAd)
.build()
Java
ContextualAds contextualAds = new ContextualAds.Builder()
.setBuyer(AdTechIdentifier.fromString(mBiddingLogicUri.getHost()))
.setDecisionLogicUri(mContextualLogicUri)
//Pass in your valid app install ads
.setAdsWithBid(appInstallAd)
.build();
Das resultierende ContextualAds
-Objekt kann dann beim Erstellen der
AdSelectionConfig
:
Kotlin
// Create a new ad
val noFilterAd: AdData = Builder()
.setMetadata(JSONObject().toString())
.setRenderUri(Uri.parse(baseUri + NO_FILTER_RENDER_SUFFIX))
.build()
val noFilterAdWithBid = AdWithBid(noFilterAd, NO_FILTER_BID)
contextualAds.getAdsWithBid().add(noFilterAdWithBid)
Java
// Create a new ad
AdData noFilterAd = new AdData.Builder()
.setMetadata(new JSONObject().toString())
.setRenderUri(Uri.parse(baseUri + NO_FILTER_RENDER_SUFFIX))
.build();
AdWithBid noFilterAdWithBid = new AdWithBid(noFilterAd, NO_FILTER_BID);
contextualAds.getAdsWithBid().add(noFilterAdWithBid);
App-Installationsanzeigen filtern
Mit dem Filter für App-Installationsanzeigen lassen sich Installationsanzeigen für Apps filtern. die bereits auf einem Gerät installiert sind.
Zunächst legen wir fest, welche Werbetreibenden um nach dem installierten Paket zu filtern. Dies muss in der App geschehen, für das Targeting mit einer Anzeige.
Kotlin
//Create a request for setting the app install advertisers
val adtech = AdTechIdentifier.fromString("your.enrolled.uri")
val adtechSet = setOf(adtech)
val request = SetAppInstallAdvertisersRequest(adtechSet)
//Set the app install advertisers in the ad selection manager
mAdSelectionManager.setAppInstallAdvertisers(
request,
mExecutor,
object : OutcomeReceiver<Any?, Exception?>() {
fun onResult(@NonNull ignoredResult: Any?) {
Log.v("[your tag]", "Updated app install advertisers")
}
fun onError(@NonNull error: Exception?) {
Log.e("[your tag]", "Failed to update app install advertisers", error)
}
})
Java
//Create a request for setting the app install advertisers
AdTechIdentifier adtech = AdTechIdentifier.fromString("your.enrolled.uri");
Set<AdTechIdentifier> adtechSet = Collections.singleton(adtech);
SetAppInstallAdvertisersRequest request = new SetAppInstallAdvertisersRequest(adtechSet);
//Set the app install advertisers in the ad selection manager
mAdSelectionManager.setAppInstallAdvertisers(
request,
mExecutor,
new OutcomeReceiver<Object, Exception>() {
@Override
public void onResult(@NonNull Object ignoredResult) {
Log.v("[your tag]", "Updated app install advertisers");
}
@Override
public void onError(@NonNull Exception error) {
Log.e("[your tag]", "Failed to update app install advertisers", error);
}
});
Wenn der vorherige Code ausgeführt wird, können die übergebenen Werbetreibenden folgende Aktionen ausführen: Herausfiltern der installierten Apps, die Sie bei der Gebotserstellung angeben. Wenn Sie müssen einen Werbetreibenden entfernen, damit dieser nicht mehr auf die Installation dieser App zugreifen kann führen Sie diesen Code noch einmal aus und entfernen Sie dabei die Werbetreibendeninformationen.
Im nächsten Schritt richten Sie die Anzeigenfilterung in der Publisher-App ein. Die Partei, die
Die Anzeige wird innerhalb der Publisher-App ausgeliefert (wahrscheinlich ein Supply-Side-SDK).
muss das AdFilters
-Objekt mit Informationen zu den Anzeigen initialisieren
die sie herausfiltern möchten:
Kotlin
// Instantiate AdFilters object with package names.
val filters: AdFilters = Builder().setAppInstallFilters(
Builder().setPackageNames(setOf("example.target.app")).build()
).build()
Java
// Instantiate AdFilters object with package names.
AdFilters filters = new AdFilters.Builder()
.setAppInstallFilters(
new AppInstallFilters.Builder()
.setPackageNames(Collections.singleton("example.target.app"))
.build())
.build();
Demand-Side-Publisher können auch eine AdFilter
für Anzeigen festlegen, die in
ihre benutzerdefinierten Zielgruppen.
AdFilters
kann auch beim Instanziieren einer neuen AdData
übergeben werden.
-Objekt enthält:
Kotlin
// Instantiate an AdData object with the AdFilters created in the
// previous example.
val appInstallAd: AdData =
Builder().setMetadata("{ ... }") // Valid JSON string
.setRenderUri(Uri.parse("www.example-dsp1.com/.../campaign123.html"))
.setAdFilters(filters).build()
Java
// Instantiate an AdData object with the AdFilters created in the
// previous example.
AdData appInstallAd = new AdData.Builder()
.setMetadata("{ ... }") // Valid JSON string
.setRenderUri(Uri.parse("www.example-dsp1.com/.../campaign123.html"))
.setAdFilters(filters)
.build();
Filtern nach Frequency Capping
Mit Frequency Capping können Anzeigentechnologie-Anbieter begrenzen, wie oft eine Anzeige angezeigt. Durch Frequency Capping wird die übermäßige Auslieferung von Anzeigen reduziert und alternative Anzeigen werden optimiert. Anzeigenauswahl für eine bestimmte Werbekampagne
Es gibt zwei Hauptkomponenten eines Frequency Capping-Filters: Anzeigenereignistyp und den Anzeigenzähler-Schlüssel. Folgende Anzeigenereignistypen können verwendet werden:
- Gewinnen (demnächst verfügbar): Wenn die Anzeige eine Auktion gewonnen hat, bedeutet das, dass sie gewonnen haben. Gewinnereignisse werden automatisch von der Protected Audience API aktualisiert und können direkt vom Entwickler aufgerufen werden. Gewinndaten sind nur für Anzeigen in einem benutzerdefinierten Zielgruppe.
- Impression: getrennt von
reportImpression
; ein On-Device-Anrufer (SSP oder MMP) verwendetupdateAdCounterHistogram()
, um Impressionsereignisse im einen Punkt im Code eingeben. Impressionsereignisse sind für alle Anzeigen sichtbar, für eine bestimmte DSP und sind nicht auf Anzeigen in derselben benutzerdefinierten Zielgruppe beschränkt. - Ansicht: Das Ereignis wird vom On-Device-Aufrufer (SSP oder MMP) an einem
mit einem Anruf bei
updateAdCounterHistogram()
. Aufrufereignisse sind die für alle Anzeigen einer DSP sichtbar sind und nicht auf Anzeigen in derselben Benutzerdefinierte Zielgruppe. - Klick: Das Ereignis wird vom Aufrufer auf dem Gerät (SSP oder MMP) an einem
mit einem Anruf bei
updateAdCounterHistogram()
. Klickereignisse für alle Anzeigen einer bestimmten DSP sichtbar sind und nicht auf Anzeigen in der für dieselbe benutzerdefinierte Zielgruppe.
In der Publisher-App ruft eine SSP oder MMP mit einer Präsenz auf dem Gerät die Anzeige auf.
Ereignisse. Wenn updateAdCounterHistogram()
aufgerufen wird, ist der Zähler einer Frequenz
Der Cap-Filter wird erhöht, sodass zukünftige Auktionen immer auf dem neuesten Stand sind.
Informationen darüber, wie ein Nutzer eine bestimmte Anzeige gesehen hat. Die Anzeigenereignistypen sind nicht
die mit der entsprechenden Nutzeraktion verbunden sind, und stellen Richtlinien dar,
zur Strukturierung ihres Ereignissystems. Um Anzeigenzähler zum Zeitpunkt der
ein Ereignis handelt, gibt der Akteur auf dem Gerät
die Anzeigenauswahl-ID an, die die Auktion gewinnt.
Anzeigenzählerschlüssel sind beliebige vorzeichenbehaftete 32-Bit-Ganzzahlen, die einer Käuferanzeige zugewiesen werden Technologie und entsprechen einem bestimmten Satz von Anzeigen, wie sie von der DSP definiert wurden. Seit Anzeige Zählerschlüssel auf Anzeigen beschränkt sind, die zu einer bestimmten DSP gehören. ohne Überschneidungen mit Histogrammen einer anderen Anzeigentechnologie auszuwählen. Anzeigenzähler Schlüssel werden verwendet, um die DSP-spezifischen Kennungen für die Anzeigen einer DSP eine bestimmte benutzerdefinierte Zielgruppe erstellen, um Anzeigen aus zukünftigen Auktionen herauszufiltern.
Mithilfe von Zählern können Anzeigen priorisiert werden, bei denen die Wahrscheinlichkeit, für einen bestimmten Nutzer interessant sein könnten, basierend auf dessen Interaktionen mit anderen Anzeigen eines der Anzeigentechnologie eines Käufers. Beispiel: Eine Anzeige, die ein hohes Maß an das Engagement aus erfolgreichen Anzeigenauktionen, Aufrufen und Klicks Datenpunkt verwendet. Zur weiteren Veranschaulichung dieses Punkts: Eine Anzeige für Linkshänder-Golfschläger könnte darauf hindeuten, dass der Nutzer kein Interesse an Rechtshändern hat. A Der Frequency Capping-Filter für eine Zählertaste, die linksseitigen Anzeigen zugewiesen ist, und filtert Anzeigen für Rechtshänder heraus.
Damit Sie Frequency Capping in Ihrer Auktion verwenden können, müssen Sie zuerst
KeyedFrequencyCap
-Objekte:
Kotlin
// Value used when incrementing frequency counter
val adCounterKey = 123
// Frequency cap exceeded after 2 counts
val keyedFrequencyCapForImpression: KeyedFrequencyCap = Builder(
adCounterKey, 2, Duration.ofSeconds(10)
).build()
// Frequency cap exceeded after 1 counts
val keyedFrequencyCapForImpression: KeyedFrequencyCap = Builder(
adCounterKey, 1, Duration.ofSeconds(10)
).build()
Java
// Value used when incrementing frequency counter
int adCounterKey = 123;
// Frequency cap exceeded after 2 counts
KeyedFrequencyCap keyedFrequencyCapForImpression =
new KeyedFrequencyCap.Builder(
adCounterKey, 2, Duration.ofSeconds(10)
).build();
// Frequency Cap exceeded after 1 counts
KeyedFrequencyCap keyedFrequencyCapForClick =
new KeyedFrequencyCap.Builder(
adCounterKey, 1, Duration.ofSeconds(10)
).build();
Nachdem die KeyedFrequencyCap
-Objekte erstellt wurden, können Sie sie an ein
AdFilters
-Objekt.
Kotlin
val filters: AdFilters = Builder()
.setFrequencyCapFilters(
Builder()
.setKeyedFrequencyCapsForImpressionEvents(
ImmutableObject.of(keyedFrequencyCapForImpression)
)
.setKeyedFrequencyCapsForClickEvents(
ImmutableObject.of(keyedFrequencyCapForClick)
)
).build()
Java
AdFilters filters = new AdFilters.Builder()
.setFrequencyCapFilters(new FrequencyCapFilters.Builder()
.setKeyedFrequencyCapsForImpressionEvents(
ImmutableObject.of(keyedFrequencyCapForImpression)
)
.setKeyedFrequencyCapsForClickEvents(
ImmutableObject.of(keyedFrequencyCapForClick)
)
).build();
Wenn das AdFilters
-Objekt mit Frequency Capping-Filtern gefüllt ist, kann es
wird übergeben, wenn die benutzerdefinierte Zielgruppe erstellt wird:
Kotlin
// Initialize a custom audience.
val audience: CustomAudience = Builder()
.setBuyer(buyer)
.setName(name)
.setAds(
listOf(
Builder()
.setRenderUri(renderUri)
.setMetadata(JSONObject().toString())
.setAdFilters(filters)
.setAdCounterKeys(adCounterKeys)
.build()
)
).build()
Java
// Initialize a custom audience.
CustomAudience audience = new CustomAudience.Builder()
.setBuyer(buyer)
.setName(name)
.setAds(Collections.singletonList(new AdData.Builder()
.setRenderUri(renderUri)
.setMetadata(new JSONObject().toString())
.setAdFilters(filters)
.setAdCounterKeys(adCounterKeys)
.build()))
.build();
Wenn Frequency Capping-Filter in einer benutzerdefinierten Zielgruppe implementiert sind, kann die SSP und dann die erforderlichen Klick-, Aufruf- oder Impression-Ereignisse auslösen.
Kotlin
val callerAdTech: AdTechIdentifier = mAdSelectionConfig.getSeller()
val request: UpdateAdCounterHistogramRequest = Builder(
adSelectionId,
FrequencyCapFilters.AD_EVENT_TYPE_CLICK, //CLICK, VIEW, or IMPRESSION
callerAdTech
).build()
Java
AdTechIdentifier callerAdTech = mAdSelectionConfig.getSeller();
UpdateAdCounterHistogramRequest request =
new UpdateAdCounterHistogramRequest.Builder(
adSelectionId,
FrequencyCapFilters.AD_EVENT_TYPE_CLICK, //CLICK, VIEW, or IMPRESSION
callerAdTech
).build();
Anzeigen, die die festgelegten Grenzwerte für Frequency Capping-Filter erreicht haben, werden herausgefiltert. der Auktion. Das Filtern erfolgt vor der Gebotslogik für On-Device-Auktionen und wenn die Nutzlast für die Gebots- und Auktion Serviceauktionen.Mit diesem Toolkit können Anzeigentechnologie-Anbieter Interaktionen zwischen Nutzern und den Anzeigen in ihren benutzerdefinierten Zielgruppen, um die Anzeigen und gleichzeitig die Auslieferung von Anzeigen möglichst gering halten.
Kontextbezogene Anzeigenfilterung ohne Netzwerkaufrufe
Falls auf dem Gerät keine Remarketing-Nachfrage besteht, können Sie eine Anzeigenauswahl für kontextbezogene Anzeigen ohne Netzwerkaufrufe. Mit vordefinierten URIs und einer Liste von kontextbezogene Anzeigen mit Geboten, muss die Plattform das Abrufen der Gebotslogik überspringen, Gebots- und Bewertungssignale. Die Plattform nutzt einen vordefinierten URI zur Auswahl Kontextanzeige mit dem höchsten Gebot
Zur Verbesserung der Latenz können Anzeigentechnologie-Anbieter eine Anzeigenauswahl ausführen, die nur
kontextbezogene Anzeigen mit Anzeigenfilterfunktion ohne Netzwerkaufrufe. Dies ist
mit vordefinierten URIs für Bewertungssignale erreicht. Im Artikel Unterstützte
Abschnitt „Vordefinierte URIs mit Anwendungsfällen und Namen“ für eine Liste von scoreAds
Implementierungen.
So führen Sie die Anzeigenauswahl ohne Netzwerkaufrufe aus:
- Anzeigenfilterung einrichten
- Kontextbezogene Anzeigen erstellen
Erstellen Sie ein
AdSelectionConfig
-Objekt mit Folgendem:- Eine leere Käuferliste
- Einen vordefinierten URI zur Auswahl des höchsten Gebots
- Kontextbasierte Anzeigen
- Ein leerer URI für die Bewertungssignale. Mit dem leeren URI kann angegeben werden, dass Sie vertrauenswürdige Signale nicht für die Bewertung abrufen möchten:
Uri prebuiltURIScoringUri = Uri.parse("ad-selection-prebuilt://ad-selection/highest-bid-wins/?reportingUrl=your.registered.uri/reporting"); // Initialize AdSelectionConfig AdSelectionConfig adSelectionConfig = new AdSelectionConfig.Builder() .setSeller(seller) .setDecisionLogicUri(prebuiltURIScoringUri) .setCustomAudienceBuyers(Collections.emptyList()) .setAdSelectionSignals(adSelectionSignals) .setSellerSignals(sellerSignals) .setPerBuyerSignals(perBuyerSignals) .setBuyerContextualAds(buyerContextualAds) .setTrustedScoringSignalsUri(Uri.EMPTY) .build();
Anzeigenauswahl ausführen:
adSelectionManager.selectAds( adSelectionConfig, executor, outcomeReceiver);
Eigenes JavaScript für die Berichterstellung mit vordefinierten URIs ausführen
Heutzutage verfügt die Privacy Sandbox-Plattform nur über ein einfaches JavaScript
-Implementierung für vordefinierte URIs verfügbar. Wenn Sie Ihre eigenen
Berichterstellung von JavaScript und Verwendung vordefinierter URIs für eine Anzeige mit niedriger Latenz
können Sie den DecisionLogicUri
zwischen Anzeigenauswahl und
Berichterstellung.
- Schritte zur Anzeigenauswahl für kontextbezogene Anzeigen mithilfe vordefinierter URIs ausführen
Erstellen Sie eine Kopie von
AdSelectionConfig
, bevor Sie Berichte erstellenadSelectionConfigWithYourReportingJS = adSelectionConfig.cloneToBuilder() // Replace <urlToFetchYourReportingJS> with your own URL: .setDecisionLogicUri(Uri.parse(<urlToFetchYourReportingJS>)) .build();
Impressionsberichte erstellen
// adSelectionId is from the result of the previous selectAds run ReportImpressionRequest request = new ReportImpressionRequest( adSelectionId, adSelectionConfigWithYourReportingJS); adSelectionManager.reportImpression( request, executor, outcomeReceiver);
Abfolgebasierte Vermittlung ausführen
Bei der abfolgebasierten Vermittlung müssen mehrere Drittanbieter-SDKs (Drittanbieter-Werbenetzwerke) die von einem SDK-Vermittlungsnetzwerk mit Erstanbieter-SDK orchestriert werden. Die abfolgebasierte Vermittlung ist unabhängig davon, ob die Auktion auf dem Gerät oder am Gebote und Auktionsdienste.
Drittanbieternetzwerke
Drittanbieternetzwerke müssen einen Adapter bereitstellen, mit dem das Vermittlungsnetzwerk Rufen Sie die erforderlichen Methoden zum Ausführen einer Auktion auf:
- Anzeigenauswahl ausführen
- Berichte zu Impressionen erstellen
Hier ein Beispiel für einen Vermittlungsadapter für das Werbenetzwerk:
Kotlin
class NetworkAdaptor {
private val adSelectionManager : AdSelectionManager
init {
adSelectionManager = context.getSystemService(AdSelectionManager::class.java)
}
fun selectAds() {...}
fun reportImpressions() {...}
}
Java
class NetworkAdaptor {
AdSelectionManager adSelectionManager;
public NetworkAdaptor() {
AdSelectionManager adSelectionManager =
context.getSystemService(AdSelectionManager.class);
}
public void selectAds() {...}
public void reportImpressions() {...}
}
Für jedes SDK sind eigene Manager und Kunden für die Anzeigenauswahl sowie eigene
Implementierung von selectAds
und reportImpressions
. SDK-Anbieter finden
die Abschnitte zur Anzeigenauswahl für On-Device-Auktionen oder das B&A
Erklärvideos für B&A-Auktionen. So melden Sie eine Anzeige
Impressionen (nach den Berichten zu Impressionen einzelner SSPs für
Berichterstellung.
Vermittlungsnetzwerk
Ähnlich wie bei Drittanbieternetzwerken benötigen Vermittlungsnetzwerke selectAds
und
reportImpression
Implementierungen. In den Abschnitten zum Schalten von Anzeigen
und wie Sie Berichte zu Anzeigenimpressionen erstellen, um weitere Informationen zu erhalten.
Vermittlungsnetzwerke sind für die Ausführung der Vermittlungskette und in der Vermittlungskette. Im nächsten Abschnitt erfahren Sie, wie Sie führen Sie diesen Prozess aus.
Vermittlungskette und Gebotsuntergrenze abrufen
Das Vermittlungsnetzwerk ist für das Abrufen der eigenen Daten zuständig.
kontextbezogene Anzeigen, Vermittlungskette und Drittanbieter-Werbenetzwerke (Drittanbieter). Dieses
kann bei einer Anfrage zum Abrufen kontextbezogener Anzeigen, die von der Vermittlung ausgeführt werden,
Netzwerk. Die Vermittlungskette bestimmt,
wie die Drittanbieternetzwerke iteriert werden.
Die Mindestpreise können als adSelectionSignals
an den Auktionsprozess übergeben werden.
Werbenetzwerk-Placement in der Vermittlungskette
Ein Vermittlungs-SDK kann sich basierend auf seinem Live-eCPM in die Vermittlungskette einfügen.
der Gebote für eigene Anzeigen. In der Protected Audience API sind Anzeigengebote intransparent. Eine Schlichtung
Das SDK sollte AdSelectionFromOutcomesConfig
verwenden, um ein bestimmtes selbst erhobenes Signal vergleichen zu können
Gebot der Anzeige auf den Mindestpreis des nächsten Drittanbieter-Werbenetzwerks in der Kette. Wenn das eigene Gebot
höher als der Mindestpreis ist, bedeutet dies, dass das SDK
dieses Drittanbieter-Netzwerks.
Anzeigenauswahl ausführen
Zum Abrufen einer selbst erhobenen Anzeigenkandidaten kann das Vermittlungsnetzwerk eine On-Device-
den Schritten im Bereich Anzeigenauswahl folgen. Dadurch werden
eine Anzeige mit selbst erhobenen Daten, ein Gebot und ein AdSelectionId
, das bei der Vermittlung verwendet wird
.
AdSelectionFromResultsConfig erstellen
Mithilfe von AdSelectionFromOutcomesConfig
kann das Vermittlungsnetzwerk eine Liste übergeben
von AdSelectionIds
(Ergebnisse aus früheren Auktionen), Signalen zur Anzeigenauswahl und
URI zum Abrufen von JavaScript, das eine Anzeige aus mehreren Kandidaten auswählt. Die Liste
AdSelectionIds zusammen mit ihren Geboten und Signalen an die
JavaScript, das eine der AdSelectionIds
zurückgeben kann, wenn es das Gebot übertrifft
Mindestpreis oder „Keine“, falls die Vermittlungskette fortgesetzt werden soll.
Vermittlungsnetzwerke erstellen ein AdSelectionFromOutcomesConfig
mithilfe selbst erhobener Daten
AdSelectionId
aus dem vorherigen Abschnitt und die Gebotsuntergrenze für das Drittanbieter-Werbenetzwerk
berücksichtigt werden. Es sollte eine neue AdSelectionFromOutcomesConfig
erstellt werden
für jeden Schritt in der Vermittlungskette.
Kotlin
fun runSelectOutcome(
adSelectionClient : AdSelectionClient,
outcome1p : AdSelectionOutcome,
network3p : NetworkAdapter) : ListenableFuture<AdSelectionOutcome?> {
val config = AdSelectionFromOutcomesConfig.Builder()
.setSeller(seller)
.setAdSelectionIds(listOf(outcome1p))
.setSelectionSignals({"bid_floor": bid_floor})
.setSelectionLogicUri(selectionLogicUri)
.build()
return adSelectionClient.selectAds(config)
}
Java
public ListenableFuture<AdSelectionOutcome> runSelectOutcome(AdSelectionOutcome outcome1p,
NetworkAdapter network3p) {
AdSelectionFromOutcomesConfig config = new AdSelectionFromOutcomesConfig.Builder()
.setSeller(seller)
.setAdSelectionIds(Collection.singletonList(outcome1p))
.setSelectionSignals({"bid_floor": bid_floor})
.setSelectionLogicUri(selectionLogicUri)
.build();
return adSelectionClient.selectAds(config){}
}
Für die Methodenüberschreibung selectAds()
für die abfolgebasierte Vermittlung ist ein
AdSelectionFromOutcomesConfig
-Eingabe, wobei Sie Folgendes angeben müssen
Erforderliche Parameter:
- Verkäufer: ID des Verkäufer-Werbenetzwerks, mit dem die Anzeigenauswahl initiiert wird.
- AdSelectionIds: Eine Singleton-Liste eines früheren
selectAds()
-Tests mit selbst erhobenen Daten Anzeige. - Signale für die Anzeigenauswahl: Ein JSON-Objekt, serialisiert als String, das Signale für die Gebotslogik des Käufers. Geben Sie in diesem Fall den Mindestpreis an, für das jeweilige Drittanbieternetzwerk abgerufen.
- Auswahllogik-URI: Eine HTTPS-URL, die während der Anzeigenauswahl zum Abrufen des
JavaScript des Vermittlungsnetzwerks zur Auswahl einer erfolgreichen Anzeige verwendet wird. Weitere Informationen finden Sie in der
Funktionssignaturen in diesem JavaScript verwenden. Der JavaScript-Code sollte die
Drittanbieteranzeige, wenn das Gebot über dem Mindestpreis liegt. Andernfalls wird
null
zurückgegeben. So kann das Mediation SDK die Vermittlungskette kürzen, wenn ein Gewinner gefunden.
Rufen Sie mit dem erstellten AdSelectionOutcomesConfig
die Methode selectAds()
von
das erste Drittanbieternetzwerk.
Kotlin
val adSelectionManager = context.getSystemService(AdSelectionManager::class.java)
// Initialize AdSelectionFromOutcomesConfig
AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig =
AdSelectionFromOutcomesConfig.Builder()
.setSeller(seller)
.setAdSelectionIds(listof(outcome1p))
.setSelectionSignals({"bid_floor": bid_floor})
.setSelectionLogicUri(selectionLogicUri)
.setAdSelectionIds(outcomeIds)
.build()
// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
adSelectionFromOutcomesConfig,
executor,
outcomeReceiver)
Java
AdSelectionManager adSelectionManager =
context.getSystemService(AdSelectionManager.class);
// Initialize AdSelectionFromOutcomesConfig
AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig =
new AdSelectionFromOutcomesConfig.Builder()
.setSeller(seller)
.setAdSelectionIds(Collection.singletonList(outcome1p))
.setSelectionSignals({"bid_floor": bid_floor})
.setSelectionLogicUri(selectionLogicUri)
.setAdSelectionIds(outcomeIds)
.build();
// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
adSelectionFromOutcomesConfig,
executor,
outcomeReceiver);
Abfolgebasierte Vermittlung orchestrieren
Für die Durchführung der Vermittlung werden die folgenden Vorgänge in der folgenden Reihenfolge ausgeführt: .
- Anzeigenauswahl für selbst erhobene Daten ausführen
- Durchlaufen Sie die Vermittlungskette. Gehen Sie für jedes Drittanbieternetzwerk so vor:
<ph type="x-smartling-placeholder">
- </ph>
- Build-
AdSelectionFromOutcomeConfig
einschließlich der selbst erhobenenoutcomeId
und der der Gebotsuntergrenze des Drittanbieter-SDKs. - Rufen Sie
selectAds()
mit der Konfiguration aus dem vorherigen Schritt auf. - Wenn das Ergebnis nicht leer ist, wird die Anzeige zurückgegeben.
- Rufen Sie die Methode
selectAds()
des aktuellen SDK-Netzwerkadapters auf. Wenn das Ergebnis nicht leer ist, geben Sie die Anzeige zurück.
- Build-
- Wenn in der Kette kein Gewinner gefunden wird, geben Sie die eigene Anzeige zurück.
Kotlin
fun runWaterfallMediation(mediationChain : List<NetworkAdapter>)
: Pair<AdSelectionOutcome, NetworkAdapter> {
val outcome1p = runAdSelection()
var outcome : AdSelectionOutcome
for(network3p in mediationChain) {
outcome = runSelectOutcome(outcome1p, network3p)
if (outcome1p.hasOutcome() && outcome.hasOutcome()) {
return Pair(outcome, this)
}
outcome = network3p.runAdSelection()
if(outcome.hasOutcome()) {
return Pair(outcome, network3p)
}
}
return Pair(outcome1p, this)
}
Java
class MediationNetwork {
AdSelectionManager adSelectionManager;
public MediationNetwork() {
AdSelectionManager adSelectionManager =
context.getSystemService(AdSelectionManager.class);
}
public void runAdSelection() {...}
public void reportImpressions() {...}
public Pair<AdSelectionOutcome, NetworkAdapter> runWaterfallMediation(
List<NetworkAdapter> mediationChain) {
AdSelectionOutcome outcome1p = runAdSelection();
AdSelectionOutcome outcome;
for(NetworkAdapter network3p: mediationChain) {
if (outcome1p.hasOutcome() &&
(outcome = runSelectOutcome(outcome1p, network3p)).hasOutcome()) {
return new Pair<>(outcome, this);
}
if((outcome = network3p.runAdSelection()).hasOutcome()) {
return new Pair<>(outcome, network3p);
}
}
return new Pair<>(outcome1p, this);
}
/* Runs comparison by creating an AdSelectionFromOutcomesConfig */
public AdSelectionOutcome runSelectOutcome(AdSelectionOutcome outcome1p,
NetworkAdapter network3p) { ... }
}
Berichte zu Anzeigenimpressionen erstellen
Es gibt zwei Möglichkeiten, um eine Anzeigenimpression zu erfassen, je nachdem, wie die Auktion ausgeführt wird. Wenn Sie eine einzelne SSP haben, die eine Auktion durchführt, folgen Sie der Anleitung in diesem Abschnitt. Wenn die abfolgebasierte Vermittlung implementieren möchten, folgen Sie der Anleitung in der Bericht zu Impressionen in der Wasserfall-Vermittlung.
Berichte zu Impressionen für eine einzelne SSP
Nachdem eine erfolgreiche Anzeige im Anzeigenauswahl-Workflow ausgewählt wurde, können Sie
Die Impression wird den teilnehmenden Buy-Side- und Sell-Side-Plattformen gemeldet.
mit der Methode AdSelectionManager.reportImpression()
. Um eine Anzeige zu melden
Impression:
- Initialisieren Sie ein
AdSelectionManager
-Objekt. - Erstellen Sie ein
ReportImpressionRequest
-Objekt mit der ID für die Anzeigenauswahl. - Rufen Sie die asynchrone
reportImpression()
-Methode mit dem ObjektReportImpressionRequest
und relevanteExecutor
undOutcomeReceiver
-Objekte.
Java
AdSelectionManager adSelectionManager =
context.getSystemService(AdSelectionManager.class);
// Initialize a ReportImpressionRequest
ReportImpressionRequest reportImpressionRequest =
new ReportImpressionRequest.Builder()
.setAdSelectionId(adSelectionId)
.setAdSelectionConfig(adSelectionConfig)
.build();
// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportImpression(
reportImpressionRequest,
executor,
outcomeReceiver);
Kotlin
val adSelectionManager = context.getSystemService(AdSelectionManager::class.java)
// Initialize a ReportImpressionRequest
val adSelectionConfig: ReportImpressionRequest =
ReportImpressionRequest.Builder()
.setAdSelectionId(adSelectionId)
.setAdSelectionConfig(adSelectionConfig)
.build()
// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportImpression(
reportImpressionRequest,
executor,
outcomeReceiver)
Initialisieren Sie ReportImpressionRequest
mit den folgenden erforderlichen
Parameter:
- Anzeigenauswahl-ID: Eine ID, die nur für einen Gerätenutzer eindeutig ist und zur Identifizierung eines Anzeigenauswahl erfolgreich war.
- Konfiguration der Anzeigenauswahl: Dieselbe Konfiguration, die in
selectAds()
verwendet wird. -Aufruf, der durch die angegebene Anzeigenauswahl-ID identifiziert wird.
Die asynchrone Methode reportImpression()
verwendet die Methode OutcomeReceiver
.
, um das Ergebnis des API-Aufrufs zu signalisieren.
- Der
onResult()
-Callback gibt an, ob URLs für Impressionsberichte erstellt und die Anfrage wurde geplant. - Der
onError()
-Callback zeigt die folgenden möglichen Bedingungen an: <ph type="x-smartling-placeholder">- </ph>
- Wenn der Aufruf mit einem ungültigen Eingabeargument initialisiert wird,
AdServicesException
gibt einIllegalArgumentException
als an, die Ursache zu finden. - Bei allen anderen Fehlern wird ein
AdServicesException
mit einemIllegalStateException
als Ursache.
- Wenn der Aufruf mit einem ungültigen Eingabeargument initialisiert wird,
Berichte zu Impressionen bei der abfolgebasierten Vermittlung
Ein Vermittlungs-SDK muss das erfolgreiche SDK verfolgen, um seine Abläufe für die Berichterstellung. Die SDKs in einer Vermittlungskette sollten -Methode, die der Vermittler aufrufen soll, um einen eigenen Berichtsablauf auszulösen. Ein SDK an einer vermittelten Auktion teilnehmen, können Sie wie oben beschrieben vorgehen, ihre eigenen Berichte erstellen.
SSPs können dieses 3P SDK-Codebeispiel als Prototyp für die Teilnahme an Vermittlungsabläufe:
Pair<AdSelectionOutcome, NetworkAdapter> winnerOutcomeAndNetwork =
mediationSdk.orchestrateMediation(mediationChain);
if (winner.first.hasOutcome()) {
winner.second.reportImpressions(winner.first.getAdSelectionId());
Endpunkte für Berichte zu Impressionen
Die Report Impression API gibt HTTPS-GET-Anfragen an Endpunkte aus, die von der Sell-Side-Plattform und der erfolgreichen Buy-Side-Plattform:
Endpunkt der Buy-Side-Plattform:
- In der API wird die in der benutzerdefinierten Zielgruppe angegebene Gebotslogik-URL verwendet, um den vom Käufer bereitgestellten JavaScript-Code abrufen, der die Logik für die Rückgabe eines URL für Impressionsberichte.
- Die JavaScript-Funktion
reportWin()
aufrufen, die voraussichtlich Folgendes zurückgeben wird: URL für die Berichterstellung zu Impressionen des Käufers.
Endpunkt der Sell-Side-Plattform:
- Verwenden Sie die URL der Entscheidungslogik, die in
AdSelectionConfig
angegeben ist. , um das JavaScript für die Entscheidungslogik des Verkäufers abzurufen. - Die JavaScript-Funktion
reportResult()
aufrufen, die den Fehlercode zurückgeben soll URL für die Berichterstellung zu Impressionen des Verkäufers.
Gebote und Berichte zu Auktionsdiensten
Eine mit Bidding und Auktionsdienste verfügen dann über alle Berichtsinformationen, einschließlich generierter URLs für Berichte zu Anzeigeninteraktionen die in der verschlüsselten Antwort der serverseitigen Auktion enthalten sind. Wenn der Parameter entschlüsselt wird, sind die entsprechenden URLs auf der Plattform registriert, für Anzeigen- und Impressionsberichte dieselben Schritte wie oben beschrieben.
Best-Effort-Berichte zu Impressionen
Die Methode reportImpression()
wurde entwickelt, um
Berichterstellung.
Anzeigeninteraktionen melden
Mit Protected Audience können Sie Berichte zu detaillierteren Interaktionen für eine gerenderte Anzeige. Dazu gehören Interaktionen wie Aufrufzeit, Klicks, Mouseovers, oder andere nützliche Messwerte, die erfasst werden können. So erhalten Sie diese Berichte erfordern zwei Schritte. Erstens müssen sich Käufer und Verkäufer registrieren, diese Berichte im Berichterstellungs-JavaScript. Dann muss der Kunde melden Sie diese Ereignisse.
Für den Empfang von Interaktionsereignissen registrieren
Die Registrierung für Interaktionsereignisse erfolgt in den reportWin()
- und
JavaScript-Funktionen von reportResult()
mithilfe einer JavaScript-Funktion
bereitgestellt von der Plattform: registerAdBeacon
. So registrieren Sie sich für einen
Ereignisbericht können Sie einfach in der Berichterstellung die JavaScript-Funktion der Plattform aufrufen.
JavaScript Im folgenden Snippet wird die reportWin()
eines Käufers verwendet, aber dieselbe
Ansatz für reportResult()
.
reportWin(
adSelectionSignals,
perBuyerSignals,
signalsForBuyer,
contextualSignals,
customAudienceSignals) {
...
// Calculate reportingUri, clickUri, viewUri, and hoverUri
registerAdBeacon({"click": clickUri, "view": viewUri, "hover": hoverUri});
return reportingUri;
}
Interaktionsereignisse in Berichten erfassen
Nachdem die Kunden eine Impression gemeldet haben, können die Interaktionen an
zuvor registrierten und erfolgreichen Buy-Side- und Sell-Side-Plattformen
AdSelectionManager.reportInteraction()
-Methode. So melden Sie ein Anzeigenereignis:
- Initialisieren Sie ein
AdSelectionManager
-Objekt. - Erstellen Sie ein
ReportInteractionRequest
-Objekt mit der ID für die Anzeigenauswahl. Interaktionsschlüssel, Interaktionsdaten und das Ziel der Berichterstellung. - Rufen Sie die asynchrone
reportInteraction()
-Methode mit demrequest
-Objekt auf. sowie relevanteExecutor
- undOutcomeReceiver
-Objekte.
AdSelectionManager adSelectionManager =
context.getSystemService(AdSelectionManager.class);
// Initialize a ReportInteractionRequest
ReportInteractionRequest request =
new ReportInteractionRequest.Builder()
.setAdSelectionId(adSelectionId)
.setInteractionKey("view")
.setInteractionData("{ viewTimeInSeconds : 1 }") // Can be any string
.setReportingDestinations(
FLAG_REPORTING_DESTINATION_BUYER | FLAG_REPORTING_DESTINATION_SELLER
)
.build();
// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportInteraction(
reportImpressionRequest,
executor,
outcomeReceiver);
Initialisieren Sie ReportInteractionRequest
mit den folgenden erforderlichen
Parameter:
- Anzeigenauswahl-ID: Eine Anzeigenauswahl-ID, die von einer zuvor zurückgegebenen
AdSelectionOutcome
- Interaktionsschlüssel: ein vom Client definierter Stringschlüssel, der die Aktion beschreibt gemeldet wird. Dieser muss mit dem Schlüssel übereinstimmen, der vom Verkäufer registriert wurde, oder in den JavaScript-Funktionen für die Berichterstellung.
- Interaktionsdaten: Ein String mit Daten, die in das Ereignis einbezogen werden sollen. -Bericht, der zurück an die Reporting-Server gesendet wird.
- Berichtsziele: Eine Bitmaske, die angibt, ob die Ereignisse
an den Käufer und/oder den Verkäufer gemeldet. Diese Flags werden vom
Plattform und die endgültige Zielmaske können mit
Geschäftsabläufe. Um einen Bericht für ein Ziel zu erstellen, können Sie das Flag des
direkt über die Plattform. Wenn Sie Berichte für mehrere Ziele erstellen möchten, verwenden Sie die bitweise und
ODER (
|
), um Flag-Werte zu kombinieren.
Die asynchrone Methode reportInteraction()
verwendet die Methode OutcomeReceiver
.
, um das Ergebnis des API-Aufrufs zu signalisieren.
- Der
onResult()
-Callback gibt an, dass der Berichtsinteraktionsaufruf gültig ist. - Der
onError()
-Callback zeigt die folgenden möglichen Bedingungen an: <ph type="x-smartling-placeholder">- </ph>
- Wird der Anruf getätigt, während die App im Hintergrund ausgeführt wird,
IllegalStateException
mit einer Fehlerbeschreibung wird zurückgegeben. - Wenn der Client beim Aufrufen von
reportInteraction()
gedrosselt wird, gibt einLimitExceededException
wird zurückgegeben. - Wenn das Paket nicht für den Aufruf der Privacy Preserving APIs registriert ist, wird ein
SecurityException()
wird zurückgegeben. - Wenn sich die Interaktionen der App-Berichte von der App unterscheiden, die aufgerufen wurde
selectAds()
wird eineIllegalStateException
zurückgegeben.
- Wird der Anruf getätigt, während die App im Hintergrund ausgeführt wird,
- Wenn der Nutzer der Aktivierung der Privacy Sandbox APIs nicht zugestimmt hat, wird der Aufruf im Hintergrund fehlschlägt.
Endpunkte für Berichte zu Interaktionen
Die Report Interaction API gibt HTTPS POST-Anfragen an Endpunkte aus, die von der Sell-Side-Plattform und der Käufer-Plattform. Protected Audience API Die Interaktionsschlüssel stimmen mit den URIs überein, die im JavaScript-Berichtssystem deklariert wurden. und senden für jede gemeldete Interaktion eine POST-Anfrage an jeden Endpunkt. Der Inhaltstyp der Anfrage ist Nur-Text, wobei der Textkörper der Interaktionsdaten.
Best-Effort-Interaktionsberichte
Die reportInteraction()
ist so konzipiert, dass Sie die folgenden Aufgaben bestmöglich nutzen können:
HTTP POST-Berichte erstellen.
Tägliches Hintergrundupdate
Beim Erstellen einer benutzerdefinierten Zielgruppe kann Ihre App oder Ihr SDK eine benutzerdefinierte Zielgruppe initialisieren Metadaten. Außerdem kann die Plattform die folgenden benutzerdefinierten anhand einer täglichen Hintergrundaktualisierung.
- Gebotssignale von Nutzern
- Daten zu vertrauenswürdigen Geboten
AdData
Liste
Bei diesem Prozess wird die URL für tägliche Updates abgefragt, die in der benutzerdefinierten Zielgruppe definiert ist. und die URL kann eine JSON-Antwort zurückgeben.
- Die JSON-Antwort kann eines der unterstützten Metadatenfelder enthalten, für das die folgenden Anforderungen erfüllt sind: zu aktualisieren.
- Jedes JSON-Feld wird unabhängig validiert. Der Client ignoriert alle falsch formatierten Feldern, sodass das Feld in auf die Antwort.
- Eine leere HTTP-Antwort oder ein leeres JSON-Objekt „
{}
“ Ergebnisse in keine Metadatenaktualisierungen. - Die Größe der Antwortnachricht muss auf 10 KB begrenzt sein.
- Alle URIs müssen HTTPS verwenden.
trusted_bidding_uri
muss dieselbe ETLD+1 wie der Käufer haben.
Beispiel: JSON-Antwort für ein tägliches Hintergrundupdate
{
"user_bidding_signals" : { ... }, // Valid JSON object
"trusted_bidding_data" : {
"trusted_bidding_uri" : 'example-dsp1-key-value-service.com',
"trusted_bidding_keys" : [ 'campaign123', 'campaign456', ... ]
},
'ads' : [
{
"render_uri" : 'www.example-dsp1.com/.../campaign123.html',
'metadata' : { ... } // Valid JSON object
},
{
"render_uri" : 'www.example-dsp1.com/.../campaign456.html',
'metadata' : { ... } // Valid JSON object
},
...
]
}
JavaScript für die Anzeigenauswahl
Der Workflow für die Anzeigenauswahl orchestriert die Ausführung der vom Käufer vom Verkäufer bereitgestelltes JavaScript.
Das vom Käufer bereitgestellte JavaScript wird von der URL für die Gebotslogik abgerufen, die im benutzerdefinierte Zielgruppe. Der zurückgegebene JavaScript-Code sollte die folgenden Funktionen enthalten:
Das vom Verkäufer bereitgestellte JavaScript wird von der URL der Entscheidungslogik abgerufen, die unter
Parameter AdSelectionConfig
für die API zur Anzeigenauswahl Die zurückgegebene
JavaScript sollte die folgenden Funktionen enthalten:
generateBid()
function generateBid(
ad,
auction_signals,
per_buyer_signals,
trusted_bidding_signals,
contextual_signals,
user_signals,
custom_audience_bidding_signals) {
return {'status': 0, 'ad': ad, 'bid': ad.metadata.result };
}
Eingabeparameter:
ad
: ein JSON-Objekt mit dem Formatvar ad = { 'render_url': url, 'metadata': json_metadata };
auction_signals, per_buyer_signals
: In der Auktion angegebene JSON-Objekte Konfigurationsobjektcustom_audience_bidding_signals
: Von der Plattform generiertes JSON-Objekt. Die Format für dieses JSON-Objekt ist:var custom_audience_signals = { "owner":"ca_owner", "buyer":"ca_buyer", "name":"ca_name", "activation_time":"ca_activation_time_epoch_ms", "expiration_time":"ca_expiration_time_epoch_ms", "user_bidding_signals":"ca_user_bidding_signals" }
Dabei gilt:
owner
,buyer
undname
sind Strings aus den Properties, für die der Parameter Name der benutzerdefinierten Zielgruppe, die an der Anzeigenauswahl teilnimmtactivation_time
undexpiration_time
sind der Zeitpunkt der Aktivierung und Ablauf der benutzerdefinierten Zielgruppe in Sekunden seit dem Unixzeit Epocheca_user_bidding_signals
ist ein JSON-String, der im Feld „userBiddingSignals
“ vonCustomAudience
bei der Erstellungtrusted_bidding_signals, contextual_signals
unduser_signals
sind JSON Objekte. Sie werden als leere Objekte übergeben und ausgefüllt in zukünftigen Versionen. Das Format wird von der Plattform nicht erzwungen und verwaltet. durch die Anzeigentechnologie.
Ergebnis:
ad
: ist die Anzeige, auf die sich das Gebot bezieht. Das Skript darf eine Kopie von erhaltene Anzeige mit unterschiedlichen Metadaten. Das Attributrender_url
des wird erwartet, dass die Anzeige unverändert bleibt.bid
: ein Gleitkommawert, der den Gebotswert für diese Anzeige darstelltstatus
: ein ganzzahliger Wert, der sein kann: <ph type="x-smartling-placeholder">- </ph>
0
: für eine erfolgreiche Ausführung1
: (oder ein beliebiger Wert ungleich null), falls eines der Eingabesignale ungültig ist. In Falls bei der Generierung eines Gebots ein Wert ungleich null zurückgegeben wird, ist der Gebotsvorgang für alle CA-Anzeigen ungültig gemacht
scoreAd()
function scoreAd(
ad,
bid,
ad_selection_config,
seller_signals,
trusted_scoring_signals,
contextual_signal,
user_signal,
custom_audience_signal) {
return {'status': 0, 'score': score };
}
Eingabeparameter:
ad
: siehe Dokumentation zugenerateBid
bid
: der Gebotswert für die Anzeigead_selection_config
: ein JSON-Objekt, das denAdSelectionConfig
-Parameter derselectAds
API. Das Format dafür ist:var ad_selection_config = { 'seller': 'seller', 'decision_logic_url': 'url_of_decision_logic', 'custom_audience_buyers': ['buyer1', 'buyer2'], 'auction_signals': auction_signals, 'per_buyer_signals': per_buyer_signals, 'contextual_ads': [ad1, ad2] }
seller_signals
: JSON-Objekte, die aussellerSignals
gelesen werdenAdSelectionConfig
API-Parametertrusted_scoring_signal
: aus dem FeldadSelectionSignals
imAdSelectionConfig
API-Parametercontextual_signals, user_signals
: JSON-Objekte. Sie werden derzeit als Leere Objekte und wird in zukünftigen Versionen gefüllt. Das Format ist nicht die von der Plattform durchgesetzt wird und von der Anzeigentechnologie verwaltet wird.per_buyer_signals
: JSON-Objekt, das aus derperBuyerSignal
-Zuordnung imAdSelectionConfig
API-Parameter, der die aktuelle benutzerdefinierte Version als Schlüssel verwendet Käufer der Zielgruppe Leer, wenn die Karte keinen Eintrag für das angegebene Käufer.
Ausgabe:
score
: ein Gleitkommawert, der den Punktzahlwert für diese Anzeige darstelltstatus
: ein ganzzahliger Wert, der sein kann: <ph type="x-smartling-placeholder">- </ph>
- 0: für eine erfolgreiche Ausführung
- 1: falls
customAudienceSignals
ungültig sind - 2: falls
AdSelectionConfig
ungültig ist - 3: wenn eines der anderen Signale ungültig ist
- Alle Werte ungleich null führen dazu, dass der Prozess fehlschlägt, der Wert bestimmt den Typ der ausgelösten Ausnahme
selectOutcome()
function selectOutcome(
outcomes,
selection_signals) {
return {'status': 0, 'result': null};
}
Eingabeparameter:
outcomes
: ein JSON-Objekt{"id": id_string, "bid": bid_double}
selection_signals
: In der Auktionskonfiguration angegebene JSON-Objekte Objekt
Ausgabe:
status
:0
für Erfolg, Nicht-Null für Fehlerresult
: eines der übergebenen Ergebnisse oder null
reportResult()
function reportResult(ad_selection_config, render_url, bid, contextual_signals) {
return {
'status': status,
'results': {'signals_for_buyer': signals_for_buyer, 'reporting_url': reporting_url }
};
}
Eingabeparameter:
ad_selection_config
: siehe Dokumentation zuscoreAds
render_url
: die Rendering-URL der erfolgreichen Anzeigebid
: das für die erfolgreiche Anzeige angebotene Gebotcontextual_signals
: siehe Dokumentation zugenerateBid
Ausgabe:
status: 0
für Erfolg und Nicht-Null für Fehlerresults
: ein JSON-Objekt, das Folgendes enthält: <ph type="x-smartling-placeholder">- </ph>
signals_for_buyer
: ein JSON-Objekt, das anreportWin
übergeben wird Funktionreporting_url
: eine URL, die von der Plattform verwendet wird, um die Person zu benachrichtigen Impression für den Käufer
reportWin()
function reportWin(
ad_selection_signals,
per_buyer_signals,
signals_for_buyer,
contextual_signals,
custom_audience_signals) {
return {'status': 0, 'results': {'reporting_url': reporting_url } };
}
Eingabeparameter:
ad_selection_signals, per_buyer_signals
: siehe Dokumentation zuscoreAd
signals_for_buyer
: ein vonreportResult
zurückgegebenes JSON-Objektcontextual_signals, custom_audience_signals
: siehe Dokumentation zugenerateBid
Ausgabe:
status: 0
für Erfolg und Nicht-Null für Fehlerresults
: ein JSON-Objekt, das Folgendes enthält: <ph type="x-smartling-placeholder">- </ph>
reporting_url
: eine URL, die von der Plattform verwendet wird, um die Person zu benachrichtigen für den Verkäufer
registerAdBeacon()
function registerAdBeacon(
beacons
)
Eingabeparameter:
beacons
: Objekt, das Schlüssel/Wert-Paare aus Interaktionsschlüsseln und Berichts-URIs. Das Format dafür ist:let beacons = { 'interaction_key': 'reporting_uri', 'interaction_key': 'reporting_uri', ... }
interaction_key
: Ein String, der das Ereignis darstellt. Diese wird vom wenn Sie Ereignisinteraktionen melden,reporting_uri
, der benachrichtigt werden soll. Dieser Schlüssel muss zwischen was der Käufer oder Verkäufer registriert und was der Verkäufer meldet.reporting_uri
: Ein URI zum Empfangen von Ereignisberichten. Dies sollte konkret sein dem Ereignistyp zugeordnet, der gemeldet werden soll. Sie muss eine POST-Anfrage zur Verarbeitung alle Daten, die zusammen mit dem Ereignis gemeldet werden.
Beispiel:
let beacons = { 'click': 'https://reporting.example.com/click_event', 'view': 'https://reporting.example.com/view_event' }
Vordefinierte URIs für die Anzeigenauswahl
Mit vordefinierten URIs können Anzeigentechnologie-Anbieter JavaScript-Funktionen für Anzeigen
Auswahllogik in AdSelectionConfig
und
AdSelectionFromOutcomesConfig
Klassen. Für vordefinierte URIs ist kein Netzwerk erforderlich
um das entsprechende JavaScript herunterzuladen. Anzeigentechnologie-Anbieter können vordefinierte URIs verwenden
ohne eine registrierte Domain zum Hosten des JavaScript einrichten zu müssen.
Ein vordefinierter URI wird im folgenden Format erstellt:
ad-selection-prebuilt:<use-case>/<name>?<required-script-generation-parameters>
Die Privacy Sandbox-Plattform stellt JavaScript bereit, das die Informationen aus dieser URI in der Laufzeit.
In folgenden Fällen wird ein IllegalArgumentException
ausgelöst:
- Einer der erforderlichen Parameter ist nicht im URI vorhanden
- URI enthält unbekannte Parameter
Unterstützte Anwendungsfälle und Namen für vordefinierte URIs
Anwendungsfall 1: Anzeigenauswahl
Vordefinierte URIs für den Anwendungsfall ad-selection
werden in der
selectAds(AdSelectionConfig)
-Ablauf.
Name des vordefinierten URI: highest-bid-wins
Dieser vordefinierte URI liefert ein JavaScript, das die Anzeige mit dem höchsten Gebot auswählt.
nach der Gebotsabgabe. Es bietet auch eine grundlegende Berichtsfunktion, mit der Sie
render_uri
und bid
des Gewinners.
Erforderliche Parameter
reportingUrl
: Die grundlegende Berichts-URL, die mit dem Parameter
render_uri
und die bid
der erfolgreichen Anzeige:
<reportingUrl>?render_uri=<renderUriOfWinnigAd>&bid=<bidOfWinningAd>
Nutzung
Wenn Ihre grundlegende Berichts-URL https://www.ssp.com/reporting
lautet, ist die vordefinierte
URI wäre:
`ad-selection-prebuilt://ad-selection/highest-bid-wins/?reportingUrl=https://www.ssp.com/reporting`
Anwendungsfall 2: Anzeigenauswahl aus Ergebnissen
Vordefinierte URIs für den Anwendungsfall ad-selection-from-outcomes
unterstützen die
selectAds(AdSelectionFromOutcomesConfig)
-Workflow.
Name des vordefinierten URI: waterfall-mediation-truncation
Der vordefinierte URI waterfall-mediation-truncation
stellt JavaScript-Code bereit, der
Implementierung einer Kürzungslogik der abfolgebasierten Vermittlung, bei der vom JavaScript-Code
eine eigene Anzeige erstellen, wenn bid
größer oder gleich bid floor
ist und
Andernfalls wird null
zurückgegeben.
Erforderliche Parameter
bidFloor
: Der Schlüssel für den an getSelectionSignals()
übergebenen Mindestpreis für das Gebot.
der mit der Anzeige des
Vermittlungs-SDKs verglichen wird.
Nutzung
Wenn die Signale für die Anzeigenauswahl so aussehen: {"bid_floor": 10}
, werden die resultierenden
wäre der vordefinierte URI:
`ad-selection-prebuilt://ad-selection-from-outcomes/waterfall-mediation-truncation/?bidFloor=bid_floor`
Test
Um Ihnen den Einstieg in die Protected Audience API zu erleichtern, haben wir ein Beispiel Anwendungen in Kotlin und Java (auf GitHub verfügbar)
Vorbereitung
Die Protected Audience API erfordert JavaScript bei der Anzeigenauswahl und Impressionsberichten. Es gibt zwei Methoden, um diesen JavaScript-Code in einem Testumgebung:
- Server mit den erforderlichen HTTPS-Endpunkten ausführen, der den JavaScript-Code zurückgibt
- Remote-Abruf überschreiben, indem Sie den erforderlichen Code aus einer lokalen Quelle bereitstellen
Bei beiden Ansätzen muss für die Verarbeitung von Impressionen ein HTTPS-Endpunkt eingerichtet werden Berichterstellung.
HTTPS-Endpunkte
Um die Anzeigenauswahl und Berichte zu Impressionen zu testen, müssen Sie sieben HTTPS- Endpunkte, auf die Ihr Testgerät oder Emulator zugreifen kann:
- Käuferendpunkt, der das JavaScript für die Gebotslogik bereitstellt.
- Ein Endpunkt, der die Gebotssignale bereitstellt.
- Verkäuferendpunkt, der die JavaScript-Entscheidungslogik bereitstellt.
- Ein Endpunkt, der Bewertungssignale bereitstellt.
- Endpunkt für Berichte der Impressionen des erfolgreichen Käufers.
- Endpunkt für Berichte zu Verkäuferimpressionen.
- Ein Endpunkt, um die täglichen Updates für eine benutzerdefinierte Zielgruppe bereitzustellen.
Der Einfachheit halber bietet das GitHub-Repository grundlegenden JavaScript-Code für Tests zu verstehen. Sie enthält auch OpenAPI-Dienstdefinitionen, die auf eine unterstützte simulierte oder Mikrodienstplattform. Weitere Informationen finden Sie im Projekt README.
Remote-Abruf von JavaScript überschreiben
Diese Funktion ist für End-to-End-Tests vorgesehen. Um Remote-Zugriff zu überschreiben abrufen möchten, muss Ihre App im Debug-Modus mit aktivierten Entwickleroptionen ausgeführt werden.
Um den Debug-Modus für Ihre Anwendung zu aktivieren, fügen Sie folgende Zeile zur App-Attribut in der AndroidManifest.xml-Datei:
<application
android:debuggable="true">
Ein Beispiel für die Verwendung dieser Überschreibungen finden Sie in der Audience API-Beispiel-App auf GitHub
Sie müssen Ihren eigenen benutzerdefinierten JavaScript-Code hinzufügen, um Anzeigenauswahlroutinen wie z. B. Gebote, Bewertungsentscheidungen und Berichte. Sie können einfachen JavaScript-Code Beispiele, die alle erforderlichen Anfragen im GitHub-Repository verarbeiten. Die Beispielanwendung der Protected Audience API zeigt, wie Code aus und bereiten Sie sie für die Überschreibung vor.
Es ist möglich, JavaScript-Abrufe auf Verkäuferseite und auf Käuferseite zu überschreiben. Unabhängig davon benötigen Sie einen HTTPS-Endpunkt, um JavaScript-Code und JavaScript-Code, für die Sie keine Überschreibungen angeben. In der README finden Sie Informationen zum Einrichten eines Servers für diese Fälle.
Der JavaScript-Abrufdienst kann nur für benutzerdefinierte Zielgruppen überschrieben werden, die gehören Ihrem Paket.
JavaScript auf Verkäuferseite überschreiben
So richten Sie eine Überschreibung von JavaScript auf Verkäuferseite ein: im folgenden Codebeispiel:
- Initialisieren Sie ein
AdSelectionManager
-Objekt. - Du kannst einen Verweis auf
TestAdSelectionManager
aus demAdSelectionManager
-Objekt. - Erstellen Sie ein
AdSelectionConfig
-Objekt. - Erstellen Sie ein
AddAdSelectionOverrideRequest
mit demAdSelectionConfig
-Objekt und einString
-Objekt, das das JavaScript darstellt die Sie als Überschreibung verwenden möchten. - Rufen Sie die asynchrone
overrideAdSelectionConfigRemoteInfo()
-Methode mit dem ObjektAddAdSelectionOverrideRequest
und relevanteExecutor
undOutcomeReceiver
-Objekte.
Kotlin
val testAdSelectionManager: TestAdSelectionManager =
context.getSystemService(AdSelectionManager::class.java).getTestAdSelectionManager()
// Initialize AdSelectionConfig =
val adSelectionConfig = new AdSelectionConfig.Builder()
.setSeller(seller)
.setDecisionLogicUrl(decisionLogicUrl)
.setCustomAudienceBuyers(customAudienceBuyers)
.setAdSelectionSignals(adSelectionSignals)
.setSellerSignals(sellerSignals)
.setPerBuyerSignals(perBuyerSignals)
.build()
// Initialize AddAddSelectionOverrideRequest
val request = AddAdSelectionOverrideRequest.Builder()
.setAdSelectionConfig(adSelectionConfig)
.setDecisionLogicJs(decisionLogicJS)
.build()
// Run the call to override the JavaScript for the given AdSelectionConfig
// Note that this only takes effect in apps marked as debuggable
testAdSelectionManager.overrideAdSelectionConfigRemoteInfo(
request,
executor,
outComeReceiver)
Java
TestAdSelectionManager testAdSelectionManager =
context.getSystemService(AdSelectionManager.class).getTestAdSelectionManager();
// Initialize AdSelectionConfig =
AdSelectionConfig adSelectionConfig = new AdSelectionConfig.Builder()
.setSeller(seller)
.setDecisionLogicUrl(decisionLogicUrl)
.setCustomAudienceBuyers(customAudienceBuyers)
.setAdSelectionSignals(adSelectionSignals)
.setSellerSignals(sellerSignals)
.setPerBuyerSignals(perBuyerSignals)
.build();
// Initialize AddAddSelectionOverrideRequest
AddAdSelectionOverrideRequest request = AddAdSelectionOverrideRequest.Builder()
.setAdSelectionConfig(adSelectionConfig)
.setDecisionLogicJs(decisionLogicJS)
.build();
// Run the call to override the JavaScript for the given AdSelectionConfig
// Note that this only takes effect in apps marked as debuggable
testAdSelectionManager.overrideAdSelectionConfigRemoteInfo(
request,
executor,
outComeReceiver);
Im Abschnitt Anzeigenauswahl ausführen finden Sie weitere Informationen zu den
werden die Felder in AdSelectionConfig
dargestellt. Der Hauptunterschied ist
die decisionLogicUrl wie gewünscht auf einen Platzhalterwert gesetzt werden kann.
ignoriert.
Um das bei der Anzeigenauswahl verwendete JavaScript zu überschreiben,
decisionLogicJs
muss die richtigen Funktionssignaturen auf Verkäuferseite enthalten.
Ein Beispiel für das Lesen einer JavaScript-Datei als String finden Sie in der
Beispiel-App für die Protected Audience API auf GitHub
Die asynchrone overrideAdSelectionConfigRemoteInfo()
-Methode verwendet die Methode
OutcomeReceiver
-Objekt, um das Ergebnis des API-Aufrufs zu signalisieren.
Der onResult()
-Callback zeigt an, dass die Überschreibung erfolgreich angewendet wurde.
Bei zukünftigen Aufrufen von selectAds()
werden die Entscheidung und Berichterstellung verwendet
die Sie als Überschreibung übergeben haben.
Der onError()
-Callback deutet auf zwei mögliche Bedingungen hin:
- Wird versucht, mit ungültigen Argumenten zu überschreiben,
AdServiceException
zeigt einIllegalArgumentException
als Ursache. - Wird versucht, eine App zu überschreiben, die nicht im Debug-Modus mit
Entwickleroptionen aktiviert, wird mit
AdServiceException
angegeben,IllegalStateException
als Ursache.
Überschreibungen auf Verkäuferseite zurücksetzen
In diesem Abschnitt wird davon ausgegangen, dass Sie das JavaScript auf Verkäuferseite überschrieben haben und dass
Sie haben einen Verweis auf TestAdSelectionManager
und
AdSelectionConfig
, der im vorherigen Abschnitt verwendet wurde.
So setzen Sie die Überschreibungen für alle AdSelectionConfigs
zurück:
- Aufrufen der asynchronen Methode
resetAllAdSelectionConfigRemoteOverrides()
durch das entsprechendeOutcomeReceiver
-Objekt.
Kotlin
// Resets overrides for all AdSelectionConfigs
testAadSelectionManager.resetAllAdSelectionConfigRemoteOverrides(
outComeReceiver)
Java
// Resets overrides for all AdSelectionConfigs
testAdSelectionManager.resetAllAdSelectionConfigRemoteOverrides(
outComeReceiver);
Nachdem du die Überschreibungen auf Verkäuferseite zurückgesetzt hast, werden für selectAds()
-Aufrufe beliebige
decisionLogicUrl wird im AdSelectionConfig
gespeichert, um zu versuchen,
den erforderlichen JavaScript-Code abrufen.
Wenn der Aufruf von resetAllAdSelectionConfigRemoteOverrides()
fehlschlägt,
Der OutComeReceiver.onError()
-Callback ist ein AdServiceException
.
Wenn das Entfernen von Überschreibungen mit einer App versucht wird, die nicht im Debug-Modus ausgeführt wird
Wenn die Entwickleroptionen aktiviert sind, gibt AdServiceException
Folgendes an:
IllegalStateException
als Ursache.
JavaScript auf Käuferseite überschreiben
- Folgen Sie dieser Anleitung, um einer benutzerdefinierten Zielgruppe beizutreten.
- Eine
AddCustomAudienceOverrideRequest
mit dem Käufer erstellen und den Namen der benutzerdefinierten Zielgruppe, die Sie überschreiben möchten, sowie den Gebotslogik und Daten, die Sie überschreiben möchten - Rufen Sie die asynchrone
overrideCustomAudienceRemoteInfo()
-Methode mit dem ObjektAddCustomAudienceOverrideRequest
und relevantExecutor
- undOutcomeReceiver
-Objekte
Kotlin
val testCustomAudienceManager: TestCustomAudienceManager =
context.getSystemService(CustomAudienceManager::class.java).getTestCustomAudienceManager()
// Join custom audience
// Build the AddCustomAudienceOverrideRequest
val request = AddCustomAudienceOverrideRequest.Builder()
.setBuyer(buyer)
.setName(name)
.setBiddingLogicJs(biddingLogicJS)
.setTrustedBiddingSignals(trustedBiddingSignals)
.build()
// Run the call to override JavaScript for the given custom audience
testCustomAudienceManager.overrideCustomAudienceRemoteInfo(
request,
executor,
outComeReceiver)
Java
TestCustomAudienceManager testCustomAudienceManager =
context.getSystemService(CustomAudienceManager.class).getTestCustomAudienceManager();
// Join custom audience
// Build the AddCustomAudienceOverrideRequest
AddCustomAudienceOverrideRequest request =
AddCustomAudienceOverrideRequest.Builder()
.setBuyer(buyer)
.setName(name)
.setBiddingLogicJs(biddingLogicJS)
.setTrustedBiddingSignals(trustedBiddingSignals)
.build();
// Run the call to override JavaScript for the given custom audience
testCustomAudienceManager.overrideCustomAudienceRemoteInfo(
request,
executor,
outComeReceiver);
Die Werte für buyer und name sind die gleichen, die bei der Erstellung verwendet wurden. der benutzerdefinierten Zielgruppe. Weitere Informationen zu diesen Feldern
Außerdem können Sie zwei zusätzliche Parameter angeben:
biddingLogicJs
: JavaScript-Code mit der Käuferlogik, die verwendet wird während der Anzeigenauswahl. Die erforderlichen Funktionssignaturen finden Sie in dieser JavaScripttrustedBiddingSignals
: Gebotssignale, die bei der Anzeigenauswahl verwendet werden sollen. Zu Testzwecken kann dies ein leerer String sein.
Die asynchrone overrideCustomAudienceRemoteInfo()
-Methode verwendet die Methode
OutcomeReceiver
-Objekt, um das Ergebnis des API-Aufrufs zu signalisieren.
Der onResult()
-Callback zeigt an, dass die Überschreibung erfolgreich angewendet wurde.
Bei nachfolgenden Aufrufen von selectAds()
wird die Gebots- und Berichterstellungslogik verwendet.
die Sie als Überschreibung übergeben haben.
Der onError()
-Callback zeigt zwei mögliche Bedingungen an.
- Wird versucht, mit ungültigen Argumenten zu überschreiben,
AdServiceException
zeigt einIllegalArgumentException
als Ursache. - Wird versucht, eine App zu überschreiben, die nicht im Debug-Modus mit
Entwickleroptionen aktiviert, wird mit
AdServiceException
angegeben,IllegalStateException
als Ursache.
Überschreibungen auf Käuferseite zurücksetzen
In diesem Abschnitt wird davon ausgegangen, dass Sie das JavaScript auf Käuferseite überschrieben haben und dass
Sie haben einen Verweis auf das TestCustomAudienceManager
, das im
vorherigen Abschnitt.
So setzen Sie Überschreibungen für alle benutzerdefinierten Zielgruppen zurück:
- Rufen Sie die asynchrone
resetAllCustomAudienceOverrides()
-Methode mit relevanteExecutor
- undOutcomeReceiver
-Objekte.
Kotlin
// Resets overrides for all custom audiences
testCustomAudienceManager.resetCustomAudienceRemoteInfoOverride(
executor,
outComeReceiver)
Java
// Resets overrides for all custom audiences
testCustomAudienceManager.resetCustomAudienceRemoteInfoOverride(
executor,
outComeReceiver)
Nachdem Sie die Überschreibungen auf Käuferseite zurückgesetzt haben, werden nachfolgende Aufrufe von selectAds()
beliebige biddingLogicUrl
und trustedBiddingData
verwenden
die in den CustomAudience
gespeichert sind, um die erforderlichen
JavaScript
Wenn der Aufruf von resetCustomAudienceRemoteInfoOverride()
fehlschlägt,
Der OutComeReceiver.onError()
-Callback ist ein AdServiceException
.
Wenn das Entfernen von Überschreibungen mit einer App versucht wird, die nicht im Debug-Modus ausgeführt wird
Wenn die Entwickleroptionen aktiviert sind, gibt AdServiceException
an,
IllegalStateException
als Ursache.
Einen Reporting-Server einrichten
Wenn Sie Überschreibungen für Remote-Abrufe verwenden, müssen Sie trotzdem einen Server einrichten. das Ihr Gerät oder Emulator erreichen kann, um auf Berichtsereignisse zu reagieren. Eine einfache Endpunkt, der 200 zurückgibt, zum Testen ausreicht. Das GitHub-Repository umfasst OpenAPI-Dienstdefinitionen, die in einem unterstützten Modell oder Mikrodienstplattform. Weitere Informationen finden Sie im Projekt README.
Suchen Sie bei den OpenAPI-Definitionen nach der Datei „reporting-server.json“.
Diese Datei enthält einen einfachen Endpunkt, der 200 zurückgibt. Dies ist ein HTTP-
-Antwortcode. Dieser Endpunkt wird während selectAds()
verwendet und signalisiert, dass
die Protected Audience API verwenden,
um die Berichterstellung zu Impressionen erfolgreich abgeschlossen zu haben.
Zu testende Funktionalität
- Wenn Sie dem Training beitreten oder es verlassen, und eine benutzerdefinierte Zielgruppe basierend auf früheren Aktionen von Nutzenden.
- Initiieren der Anzeigenauswahl auf dem Gerät über gehostete JavaScripts Remote-Zugriff.
- Beobachten, wie sich die Verknüpfung einer App mit benutzerdefinierten Zielgruppeneinstellungen auf die Anzeige auswirken kann Auswahlergebnisse.
- Führen Sie nach der Anzeigenauswahl die Impressionsberichte durch.
Beschränkungen
In der folgenden Tabelle sind Einschränkungen für die Verarbeitung durch die Protected Audience API aufgeführt. Die Limits können sich je nach Feedback ändern. Für in Arbeit, erhalten Sie in den Versionshinweisen.
Komponente | Beschreibung des Limits | Limitwert |
---|---|---|
Benutzerdefinierte Zielgruppe (Kanada) | Maximale Anzahl von Anzeigen pro Zertifizierungsstelle | 100 |
Maximale Anzahl Zertifizierungsstellen pro Anwendung | 1000 | |
Maximale Anzahl von Apps, die eine Zertifizierungsstelle erstellen können | 1000 | |
Maximale Verzögerung der Aktivierungszeit einer Zertifizierungsstelle ab ihrer Erstellung | 60 Tage | |
Maximale Ablaufzeit einer Zertifizierungsstelle ab ihrer Aktivierungszeit | 60 Tage | |
Maximale Anzahl von Zertifizierungsstellen auf dem Gerät | 4000 | |
Maximale Größe des CA-Namens | 200 Byte | |
Maximale Größe des täglichen Abruf-URI | 400 Byte | |
Maximale Größe des URI für die Gebotslogik | 400 Byte | |
Maximale Größe von Daten für vertrauenswürdige Gebote | 10 KB | |
Maximale Größe von Gebotssignalen von Nutzern | 10 KB | |
Maximale Anrufrate für leaveCustomAudience pro Käufer |
1 pro Sekunde | |
Maximale Anrufrate für joinCustomAudience pro Käufer |
1 pro Sekunde | |
CA-Hintergrundabruf | Zeitüberschreitung beim Verbindungsaufbau | 5 Sekunden |
HTTP-Lesezeitlimit | 30 Sekunden | |
Maximale Downloadgröße insgesamt | 10 KB | |
Maximale Dauer einer Abrufiteration | 5 Minuten | |
Maximale Anzahl von Zertifizierungsstellen pro Job aktualisiert | 1000 | |
Anzeigenauswahl | Maximale Anzahl von Käufern | Noch offen |
Maximale Anzahl Zertifizierungsstellen pro Käufer | Noch offen | |
Maximale Anzahl von Anzeigen in einer Auktion | Noch offen | |
Zeitüberschreitung bei der ersten Verbindung | 5 Sekunden | |
Zeitlimit für Verbindungslesevorgang | 5 Sekunden | |
Maximale Ausführungszeit von AdSelection insgesamt |
10 Sekunden | |
Maximale Ausführungszeit von Bidding pro Zertifizierungsstelle in AdSelection |
5 Sekunden | |
Maximale Ausführungszeit der Bewertung in AdSelection |
5 Sekunden | |
Maximale Ausführungszeit für pro Käufer in AdSelection |
Noch offen | |
Maximale Größe der Anzeigenauswahl-/Verkäufer-/Käufersignale | Noch offen | |
Maximale Größe von Verkäufer-/Käuferskripts | Noch offen | |
Maximale Anrufrate für selectAds |
1 Abfragen pro Sekunde | |
Berichte zu Impressionen | Mindestzeit, bevor die Anzeigenauswahl aus der Persistenz entfernt wird | 24 Stunden |
Maximale Anzahl der für Speicheranzeigen ausgewählten Anzeigen | Noch offen | |
Maximale Größe der URL für die Berichtsausgabe | Noch offen | |
Maximale Zeit für Impressionsberichte | Noch offen | |
Maximale Anzahl von Wiederholungsversuchen für Benachrichtigungsaufrufe | Noch offen | |
Zeitüberschreitung der Verbindung | 5 Sekunden | |
Maximale Gesamtausführungszeit für reportImpression |
2 Sekunden | |
Maximale Anrufrate für reportImpressions |
1 Abfragen pro Sekunde | |
Ereignisberichte | Maximale Anzahl von Beacons pro Käufer und Auktion | 10 |
Maximale Anzahl von Beacons pro Verkäufer und Auktion |
10 |
|
Maximale Größe des Ereignisschlüssels |
40 Byte |
|
Maximale Größe von Ereignisdaten |
64KB |
|
Anzeigen | Maximale Größe der Anzeigenliste | 10 KB für alle freigegeben
AdData
in einer einzigen Zertifizierungsstelle für kontextabhängige |
URLs | Maximale Länge eines als Eingabe verwendeten URL-Strings | Noch offen |
JavaScript | Maximale Ausführungszeit | 1 Sekunde für Gebote und Bewertung im Impressionsbericht |
Maximal verwendeter Arbeitsspeicher | 10 MB |
Fehler und Probleme melden
Ihr Feedback ist ein wichtiger Teil der Privacy Sandbox für Android. Teilen Sie uns Ihre Meinung mit. alle Probleme, die Sie gefunden haben, oder Ideen zur Verbesserung der Privacy Sandbox für Android.
Persönliche Empfehlungen
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Targeting auf benutzerdefinierte Zielgruppen mit der Protected Audience API unterstützen
- Versionshinweise
- Protected Audience: Integrationsanleitung