Zusätzlich zu den systemdefinierten nativen Formaten können Ad Manager-Publisher eigene native Anzeigenformate erstellen, indem sie benutzerdefinierte Listen von Assets definieren. Diese werden als benutzerdefinierte native Anzeigenformate bezeichnet und können mit Reservierungsanzeigen verwendet werden. So können Publisher beliebige strukturierte Daten an ihre Apps übergeben. Diese Anzeigen werden durch das Objekt NativeCustomFormatAd dargestellt.
Benutzerdefinierte native Anzeigenformate laden
In diesem Leitfaden wird beschrieben, wie Sie benutzerdefinierte native Anzeigenformate laden und anzeigen.
Benutzerdefinierte native Anzeige laden
So laden Sie eine benutzerdefinierte native Anzeige:
Fügen Sie den Typ
NativeAdType.CUSTOM_NATIVEals Anzeigentyp in dieNativeAdRequestein.Legen Sie die Format-ID der benutzerdefinierten nativen Anzeige fest.
Kotlin
Java
ID des benutzerdefinierten nativen Anzeigenformats
Die Format-ID, mit der ein benutzerdefiniertes natives Anzeigenformat identifiziert wird, finden Sie in der Ad Manager-Benutzeroberfläche im Bereich Nativ im Drop-down-Menü Auslieferung:

Die ID des benutzerdefinierten nativen Anzeigenformats wird neben dem Namen angezeigt. Wenn Sie auf einen der Namen klicken, gelangen Sie zu einem Detailbildschirm mit Informationen zu den Feldern des Formats:

Hier können einzelne Felder hinzugefügt, bearbeitet und entfernt werden. Notieren Sie sich den Namen der einzelnen Assets. Der Name ist der Schlüssel, mit dem die Daten für jedes Asset abgerufen werden, wenn Ihr benutzerdefiniertes natives Anzeigenformat angezeigt wird.
Benutzerdefinierte native Anzeigenformate für das Displaynetzwerk
Benutzerdefinierte native Anzeigenformate unterscheiden sich von systemdefinierten Formaten dadurch, dass Publisher die Möglichkeit haben, eine eigene Liste von Assets zu definieren, aus denen eine Anzeige besteht. Daher unterscheidet sich der Prozess für die Anzeige eines benutzerdefinierten Formats in einigen Punkten von systemdefinierten Formaten:
- Text- und Bild-Assets sind über die Getter
getText()undgetImage()verfügbar, die den Feldnamen als Parameter verwenden. - Da es keine dedizierte
ViewGroup-Klasse gibt, die bei Google registriert werden muss, müssen Sie Impressionen und Klicks manuell erfassen. - Eine benutzerdefinierte native Anzeige hat einen Medieninhalt vom Typ
null, wenn sie kein Video-Asset enthält.
In diesem Beispiel wird gezeigt, wie Sie ein CustomNativeAd anzeigen:
Kotlin
private fun displayCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
// Render the text elements.
// The `customNativeAdBinding` is the layout binding for the ad container that
// contains all `CustomNativeAd` assets.
customNativeAdBinding.headline.text = customNativeAd.getText("Headline")
customNativeAdBinding.caption.text = customNativeAd.getText("Caption")
// If the main asset is an image, render it with an ImageView.
val imageView = ImageView(context)
imageView.adjustViewBounds = true
imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
customNativeAdBinding.mediaPlaceholder.addView(imageView)
// Render the ad choices icon.
renderAdChoices(customNativeAd)
// Record an impression.
customNativeAd.recordImpression()
}
Java
private void displayCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
// Render the text elements.
// The `customNativeAdBinding` is the layout binding for the ad container that
// contains all `CustomNativeAd` assets.
if (customNativeAdBinding != null) {
customNativeAdBinding.headline.setText(customNativeAd.getText("Headline"));
customNativeAdBinding.caption.setText(customNativeAd.getText("Caption"));
ImageView imageView = new ImageView(context);
imageView.setAdjustViewBounds(true);
imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
customNativeAdBinding.mediaPlaceholder.addView(imageView);
// Render the ad choices icon.
renderAdChoices(customNativeAd);
// Record an impression.
customNativeAd.recordImpression();
}
}
Native Videos für benutzerdefinierte native Anzeigenformate
Wenn Sie ein benutzerdefiniertes Format erstellen, können Sie es für Videos aktivieren.
In Ihrer App-Implementierung können Sie CustomNativeAd.getMediaContent() verwenden, um die Medieninhalte abzurufen. Rufen Sie dann setMediaContent() auf, um die Medieninhalte in der Medienansicht festzulegen.
Wenn die Anzeige null-Medieninhalte enthält, sollten Sie alternative Pläne erstellen, um die Anzeige ohne Video zu präsentieren.
Im folgenden Beispiel wird geprüft, ob die Anzeige Videoinhalte enthält. Wenn kein Video verfügbar ist, wird stattdessen ein Bild angezeigt:
Kotlin
private fun displayVideoCustomNativeAd(customNativeAd: CustomNativeAd, context: Context) {
// Check whether the custom native ad has video content.
val mediaContent = customNativeAd.mediaContent
if (mediaContent != null && mediaContent.hasVideoContent) {
// Render the media content in a MediaView.
val mediaView = MediaView(context)
mediaView.mediaContent = mediaContent
customNativeAdBinding.mediaPlaceholder.addView(mediaView)
} else {
// Fall back to other assets defined on your custom native ad.
val imageView = ImageView(context)
imageView.adjustViewBounds = true
imageView.setImageDrawable(customNativeAd.getImage("MainImage")?.drawable)
customNativeAdBinding.mediaPlaceholder.addView(imageView)
}
// Record an impression.
customNativeAd.recordImpression()
}
Java
private void displayVideoCustomNativeAd(CustomNativeAd customNativeAd, Context context) {
// Check whether the custom native ad has video content.
MediaContent mediaContent = customNativeAd.getMediaContent();
if (mediaContent != null && mediaContent.getHasVideoContent()) {
// Render the media content in a MediaView.
MediaView mediaView = new MediaView(context);
mediaView.setMediaContent(mediaContent);
customNativeAdBinding.mediaPlaceholder.addView(mediaView);
} else {
// Fall back to other assets defined on your custom native ad.
ImageView imageView = new ImageView(context);
imageView.setAdjustViewBounds(true);
imageView.setImageDrawable(customNativeAd.getImage("MainImage").getDrawable());
customNativeAdBinding.mediaPlaceholder.addView(imageView);
}
// Record an impression.
customNativeAd.recordImpression();
}
Weitere Informationen zum Anpassen der Videowiedergabe einer benutzerdefinierten nativen Anzeige finden Sie unter Videoanzeigen.
Datenschutzinfo-Symbol rendern
Im Rahmen der Unterstützung des Gesetzes über digitale Dienste (Digital Services Act, DSA) müssen im Europäischen Wirtschaftsraum (EWR) ausgelieferte Reservierungsanzeigen ein Datenschutzinfo-Symbol und einen Link zur Google-Seite „Infos zur Anzeige“ enthalten. Wenn Sie benutzerdefinierte native Anzeigen implementieren, sind Sie für das Rendern des Datenschutzinfo-Symbols verantwortlich. Wir empfehlen, beim Rendern der Haupt-Anzeigen-Assets Schritte zu unternehmen, um den Click Listener für das Datenschutzinfo-Symbol zu rendern und einzurichten.
Im folgenden Beispiel wird davon ausgegangen, dass Sie in Ihrer Ansichtshierarchie ein <ImageView />-Element definiert haben, das das Datenschutzinfo-Logo enthält.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/adChoices"
android:layout_width="15dp"
android:layout_height="15dp"
android:adjustViewBounds="true"
android:contentDescription="AdChoices icon." />
</LinearLayout>
In den folgenden Beispielen wird das Datenschutzinfo-Symbol gerendert und das entsprechende Klickverhalten konfiguriert.
Kotlin
private fun renderAdChoices(customNativeAd: CustomNativeAd) {
// Render the AdChoices image.
val adChoiceAsset = customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
if (adChoiceAsset != null) {
customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.drawable)
customNativeAdBinding.adchoices.visibility = View.VISIBLE
customNativeAdBinding.adchoices.setOnClickListener {
// Handle click. See the next section for more details.
customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW)
}
} else {
customNativeAdBinding.adchoices.visibility = View.GONE
}
}
Java
private void renderAdChoices(CustomNativeAd customNativeAd) {
// Render the AdChoices image.
Image adChoiceAsset =
customNativeAd.getImage(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
if (adChoiceAsset != null) {
if (customNativeAdBinding != null) {
customNativeAdBinding.adchoices.setImageDrawable(adChoiceAsset.getDrawable());
customNativeAdBinding.adchoices.setVisibility(View.VISIBLE);
customNativeAdBinding.adchoices.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// Handle click.
customNativeAd.performClick(NativeAdAssetNames.ASSET_ADCHOICES_CONTAINER_VIEW);
}
});
}
} else {
if (customNativeAdBinding != null) {
customNativeAdBinding.adchoices.setVisibility(View.GONE);
}
}
}
Impressionen erfassen und Klicks melden
Ihre App ist dafür verantwortlich, Impressionen aufzuzeichnen und Click-Events an GMA Next-Gen SDK zu melden.
Impressionen erfassen
Wenn Sie eine Impression für eine benutzerdefinierte native Anzeige erfassen möchten, rufen Sie die Methode recordImpression() der Anzeige auf:
Kotlin
// Record an impression.
customNativeAd.recordImpression()
Java
// Record an impression.
customNativeAd.recordImpression();
Wenn Ihre App die Methode versehentlich zweimal für dieselbe Anzeige aufruft, verhindert das SDK automatisch, dass für eine einzelne Anfrage eine doppelte Impression erfasst wird.
Klicks melden
Wenn Sie dem SDK melden möchten, dass ein Klick auf eine Asset-Ansicht erfolgt ist, rufen Sie die Methode performClick() der Anzeige auf. Geben Sie den Namen des Assets an, auf das geklickt wurde. Verwenden Sie dazu denselben String, den Sie in der Ad Manager-Benutzeroberfläche definiert haben.
Kotlin
imageView.setOnClickListener { customNativeAd.performClick("MainImage") }
Java
imageView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
customNativeAd.performClick("MainImage");
}
});
Sie müssen diese Methode nicht für jede Ansicht aufrufen, die mit Ihrer Anzeige verknüpft ist. Wenn Sie ein anderes Feld mit dem Namen „Caption“ haben, das angezeigt, aber nicht vom Nutzer angeklickt oder angetippt werden soll, muss Ihre App für die Ansicht dieses Assets nicht performClick aufrufen.
Auf benutzerdefinierte Klickaktionen reagieren
Wenn auf eine Anzeige im benutzerdefinierten Format geklickt wird, gibt es drei mögliche Antworten vom SDK, die in dieser Reihenfolge versucht werden:
- Rufen Sie den
OnCustomClickListenerauf, falls einer angegeben wurde. - Versuche, für jede Deeplink-URL der Anzeige einen Content Resolver zu finden, und starte den ersten, der die URL auflöst.
- Öffnen Sie einen Browser und rufen Sie die Ziel-URL der Anzeige auf.
Wenn Sie eine benutzerdefinierte Klickaktion implementieren möchten, geben Sie ein OnCustomClickListener an:
Kotlin
customNativeAd.onCustomClickListener =
object : OnCustomClickListener {
override fun onCustomClick(assetName: String) {
// Perform your custom action.
}
}
Java
customNativeAd.setOnCustomClickListener(
new OnCustomClickListener() {
@Override
public void onCustomClick(@NonNull String assetName) {
// Perform your custom action.
}
});
Auf den ersten Blick mag es seltsam erscheinen, dass es benutzerdefinierte Klick-Listener gibt. Schließlich hat Ihre App dem SDK gerade mitgeteilt, dass ein Klick stattgefunden hat. Warum sollte das SDK das also der App melden?
Dieser Informationsfluss ist aus mehreren Gründen nützlich. Vor allem aber kann das SDK so die Kontrolle über die Reaktion auf den Klick behalten. Beispielsweise können automatisch Drittanbieter-Tracking-URLs gepingt werden, die für das Creative festgelegt wurden. Außerdem können andere Aufgaben im Hintergrund ohne zusätzlichen Code ausgeführt werden.