Mit der Native Banner Ad API kannst du ein personalisiertes Erlebnis für das Anzeigen deiner nativen Ad ohne die Werbeanzeigen-Assets des Werbetreibenden erstellen, wie zum Beispiel Bild-, Video- oder Carousel-Inhalte. Ähnlich wie bei nativen Anzeigen erhältst du eine Gruppe an Werbeanzeigeneigenschaften, wie einen Titel, ein Symbol und einen Call to Action, und kannst dir daraus eine Werbeanzeige individuell zusammenstellen. Anders als Werbebanner bietet die Native Banner Ad API ein natives Layout-Erlebnis, sodass du das Layout von Komponenten innerhalb der Anzeige vollständig anpassen kannst.
Stelle sicher, dass du die Leitfäden zu den ersten Schritten mit dem Audience Network und mit Android abgeschlossen hast, bevor du fortfährst.
In diesem Leitfaden implementieren wir die folgende Platzierung einer nativen Banner Ad. Du erstellst eine native Banner Ad, die die folgenden Komponenten enthält:
Ansicht 1: AdOptionsViewAnsicht 2: Hinweis „Anzeige“Ansicht 3: Symbol der Werbeanzeige | Ansicht 4: Titel der WerbeanzeigeAnsicht 5: Sozialer KontextAnsicht 6: Call to Action-Button |

Diese Methode wurde in Android Audience Network SDK Version 5.1 hinzugefügt
Seit Version 5.3.0 ist die Initialisierung des Audience Network-SDK für Android obligatorisch In diesem Dokument finden Sie Informationen zur Initialisierung des Audience Network-SDK für Android.
Vor der Erstellung eines Werbeanzeigenobjekts und dem Laden von Werbeanzeigen müssen Sie Audience Network-SDK initialisieren. Dies wird beim App-Launch empfohlen.
public class YourApplication extends Application {
...
@Override
public void onCreate() {
super.onCreate();
// Initialize the Audience Network SDK
AudienceNetworkAds.initialize(this);
}
...
}Füge folgenden Code am Anfang deiner Aktivität ein, um das Facebook-Werbeanzeigen-SDK zu importieren:
import com.facebook.ads.*;
Instanziiere dann ein NativeBannerAd-Objekt, erstelle ein AdListener und rufe loadAd(...) in deiner Aktivität auf:
public class NativeBannerAdActivity extends Activity {
private final String TAG = NativeBannerAdActivity.class.getSimpleName();
private NativeBannerAd nativeBannerAd;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Instantiate a NativeBannerAd object.
// NOTE: the placement ID will eventually identify this as your App, you can ignore it for
// now, while you are testing and replace it later when you have signed up.
// While you are using this temporary code you will only get test ads and if you release
// your code like this to the Google Play your users will not receive ads (you will get a no fill error).
nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID");
NativeAdListener nativeAdListener = new NativeAdListener() {
@Override
public void onMediaDownloaded(Ad ad) {
// Native ad finished downloading all assets
Log.e(TAG, "Native ad finished downloading all assets.");
}
@Override
public void onError(Ad ad, AdError adError) {
// Native ad failed to load
Log.e(TAG, "Native ad failed to load: " + adError.getErrorMessage());
}
@Override
public void onAdLoaded(Ad ad) {
// Native ad is loaded and ready to be displayed
Log.d(TAG, "Native ad is loaded and ready to be displayed!");
}
@Override
public void onAdClicked(Ad ad) {
// Native ad clicked
Log.d(TAG, "Native ad clicked!");
}
@Override
public void onLoggingImpression(Ad ad) {
// Native ad impression
Log.d(TAG, "Native ad impression logged!");
}
});
// load the ad
nativeBannerAd.loadAd(
nativeBannerAd.buildLoadAdConfig()
.withAdListener(nativeAdListener)
.build());
}
}Später kommen wir hierher zurück, um Code zur onAdLoaded()-Methode hinzuzufügen.
Als Nächstes musst du die Metadaten der Werbeanzeige extrahieren und aus ihren Eigenschaften eine individuelle native Benutzeroberfläche erstellen. Du kannst deine individuelle Ansicht in einer Layout-XML-Datei erstellen oder Elemente als Code hinzufügen.
Nutze unsere Richtlinien für native Werbeanzeigen beim Erstellen nativer Werbeanzeigenbanner in deiner App.
Füge im Layout deiner Aktivität activity_main.xml einen Container für deine Native Banner Ad hinzu. Der Container muss ein com.facebook.ads.NativeAdLayout sein, wobei es sich um einen Wrapper für ein FrameLayout mit einigen Zusatzfunktionen handelt, mit dem wir einen nativen Anzeigenberichterstattungsfluss über der Ad darstellen können. Später bei Anwendung der onAdLoaded()-Methode fügst du die Ansicht deiner nativen anzeige in diesen Container ein.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<com.facebook.ads.NativeAdLayout
android:id="@+id/native_banner_ad_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
...
</RelativeLayout>Erstelle ein individuelles Layout native_banner_ad_unit.xml für deine Native Banner Ad:

Unten findest du ein Beispiel für ein individuelles Layout für deine native Banner Ad:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:id="@+id/ad_choices_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp" />
<TextView
android:id="@+id/native_ad_sponsored_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:ellipsize="end"
android:lines="1"
android:padding="2dp"
android:textColor="@android:color/darker_gray"
android:textSize="12sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
<com.facebook.ads.MediaView
android:id="@+id/native_icon_view"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:gravity="center" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:paddingLeft="53dp"
android:paddingRight="83dp">
<TextView
android:id="@+id/native_ad_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:lines="1"
android:textColor="@android:color/black"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/native_ad_social_context"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:lines="1"
android:textSize="12sp" />
</LinearLayout>
<Button
android:id="@+id/native_ad_call_to_action"
android:layout_width="80dp"
android:layout_height="50dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:background="#4286F4"
android:gravity="center"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:textColor="@android:color/white"
android:textSize="12sp"
android:visibility="gone" />
</RelativeLayout>
</LinearLayout>onAdLoaded()-Methode an, um die Eigenschaften der Native Banner Ad's abzurufen und sie anzuzeigen:public class NativeBannerAdActivity extends Activity {
private NativeAdLayout nativeAdLayout;
private LinearLayout adView;
private NativeBannerAd nativeBannerAd;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Instantiate a NativeBannerAd object.
// NOTE: the placement ID will eventually identify this as your App, you can ignore it for
// now, while you are testing and replace it later when you have signed up.
// While you are using this temporary code you will only get test ads and if you release
// your code like this to the Google Play your users will not receive ads (you will get a no fill error).
nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID");
NativeAdListener nativeAdListener = new NativeAdListener() {
...
@Override
public void onAdLoaded(Ad ad) {
// Race condition, load() called again before last ad was displayed
if (nativeBannerAd == null || nativeBannerAd != ad) {
return;
}
// Inflate Native Banner Ad into Container
inflateAd(nativeBannerAd);
}
...
});
// load the ad
nativeBannerAd.loadAd(
nativeBannerAd.buildLoadAdConfig()
.withAdListener(nativeAdListener)
.build());
}
private void inflateAd(NativeBannerAd nativeBannerAd) {
// Unregister last ad
nativeBannerAd.unregisterView();
// Add the Ad view into the ad container.
nativeAdLayout = findViewById(R.id.native_banner_ad_container);
LayoutInflater inflater = LayoutInflater.from(NativeBannerAdActivity.this);
// Inflate the Ad view. The layout referenced is the one you created in the last step.
adView = (LinearLayout) inflater.inflate(R.layout.native_banner_ad_layout, nativeAdLayout, false);
nativeAdLayout.addView(adView);
// Add the AdChoices icon
RelativeLayout adChoicesContainer = adView.findViewById(R.id.ad_choices_container);
AdOptionsView adOptionsView = new AdOptionsView(NativeBannerAdActivity.this, nativeBannerAd, nativeAdLayout);
adChoicesContainer.removeAllViews();
adChoicesContainer.addView(adOptionsView, 0);
// Create native UI using the ad metadata.
TextView nativeAdTitle = adView.findViewById(R.id.native_ad_title);
TextView nativeAdSocialContext = adView.findViewById(R.id.native_ad_social_context);
TextView sponsoredLabel = adView.findViewById(R.id.native_ad_sponsored_label);
MediaView nativeAdIconView = adView.findViewById(R.id.native_icon_view);
Button nativeAdCallToAction = adView.findViewById(R.id.native_ad_call_to_action);
// Set the Text.
nativeAdCallToAction.setText(nativeBannerAd.getAdCallToAction());
nativeAdCallToAction.setVisibility(
nativeBannerAd.hasCallToAction() ? View.VISIBLE : View.INVISIBLE);
nativeAdTitle.setText(nativeBannerAd.getAdvertiserName());
nativeAdSocialContext.setText(nativeBannerAd.getAdSocialContext());
sponsoredLabel.setText(nativeBannerAd.getSponsoredTranslation());
// Register the Title and CTA button to listen for clicks.
List<View> clickableViews = new ArrayList<>();
clickableViews.add(nativeAdTitle);
clickableViews.add(nativeAdCallToAction);
nativeBannerAd.registerViewForInteraction(adView, nativeAdIconView, clickableViews);
}
}Das SDK protokolliert die Impression und verarbeitet den Klick automatisch. Beachte, dass du die Ansicht der Werbeanzeige bei der NativeBannerAd-Instanz registrieren musst, um dies zu ermöglichen. Damit alle Eelemente der Ansicht klickbar sind, registriere sie wie folgt:
registerViewForInteraction(View view, MediaView adIconView)
Falls die Werbeanzeige nicht sofort angezeigt wird, nachdem sie geladen wurde, muss der Entwickler prüfen, ob die Werbeanzeige ungültig gemacht wurde. Nach dem erfolgreichen Laden der Werbeanzeige ist diese 60 Minuten lang gültig. Du wirst nichtbezahlt, wenn du eine ungültige Werbeanzeige anzeigst. Du solltest isAdInvalidated() aufrufen, um die Anzeige zu validieren.
Orientiere dich an nachstehendem Beispiel, aber kopiere bitte den Code nicht in dein Projekt, da es sich wie gesagt nur um ein Beispiel handelt:
public class NativeBannerAdActivity extends Activity {
private NativeBannerAd nativeBannerAd;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Instantiate a NativeBannerAd object.
// NOTE: the placement ID will eventually identify this as your App, you can ignore it for
// now, while you are testing and replace it later when you have signed up.
// While you are using this temporary code you will only get test ads and if you release
// your code like this to the Google Play your users will not receive ads (you will get a no fill error).
nativeBannerAd = new NativeBannerAd(this, "YOUR_PLACEMENT_ID");
NativeAdListener nativeAdListener = new NativeAdListener() {
...
});
// load the ad
nativeBannerAd.loadAd(
nativeBannerAd.buildLoadAdConfig()
.withAdListener(nativeAdListener)
.build());
}
private void showAdWithDelay() {
/**
* Here is an example for displaying the ad with delay;
* Please do not copy the Handler into your project
*/
// Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
// Check if nativeBannerAd has been loaded successfully
if(nativeBannerAd == null || !nativeBannerAd.isAdLoaded()) {
return;
}
// Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad.
if(nativeBannerAd.isAdInvalidated()) {
return;
}
inflateAd(nativeBannerAd); // Inflate Native Banner Ad into Container same as in previous code example
}
}, 1000 * 60 * 15); // Show the ad after 15 minutes
}
}Um die Nutzererfahrung und deine Ergebnisse zu verbessern, solltest du den klickbaren Bereich festlegen, um versehentliche Klicks zu vermeiden. Auf der Seite zu den Richtlinien für das Audience Network-SDK erhältst du mehr Informationen darüber, wie du dafür sorgst, dass leere Bereiche nicht anklickbar sind.
Um den klickbaren Bereich genau festzulegen, kannst du mit registerViewForInteraction(View view, MediaView adIconView, List<View> clickableViews) eine Liste der klickbaren Ansichten registrieren. Wenn z. B. im vorherigen Beispiel nur der Anzeigentitel und der Call to Action-Button klickbar sein sollen, kann der Code etwa wie folgt aussehen:
@Override
public void onAdLoaded(Ad ad) {
...
List<View> clickableViews = new ArrayList<>();
clickableViews.add(nativeAdTitle);
clickableViews.add(nativeAdCallToAction);
nativeBannerAd.registerViewForInteraction(mAdView, nativeAdIconView, clickableViews);
...
}Wenn du die Ansicht wiederverwendest, um über einen bestimmten Zeitraum verschiedene Werbeanzeigen anzuzeigen, vergiss nicht, unregisterView() aufzurufen, bevor du dieselbe Ansicht bei einer anderen Instanz von NativeBannerAd registrierst.
Führe den Code aus. Du solltest eine native Banner Ad sehen:

Wenn eine Werbeanzeige geladen wird, enthalten die folgenden Eigenschaften einige Werte: title, icon und callToAction. Andere Eigenschaften können null oder leer sein. Vergewissere dich, dass dein Code diese Fälle verarbeiten kann.
Wenn es keine Werbeanzeige zum Anzeigen gibt, wird onError mit einem error.code aufgerufen. Wenn du deine eigene Berichts- oder Mediationsebene verwendest, solltest du den Codewert prüfen und diesen Fall erkennen. Du kannst in diesem Fall auf ein anderes Anzeigennetzwerk zurückgreifen, aber fordere danach nicht sofort eine neue Werbeanzeige an.
Erhaltene Werbeanzeigen-Metadaten können bis zu 30 Minuten lang zwischengespeichert und immer wieder verwendet werden. Wenn du die Metadaten nach dieser Zeitspanne weiter verwenden möchtest, lade eine neue Werbeanzeige.
Relevante Codebeispiele in Swift und Objective-C findest du in unserem GitHub-Repository mit Beispiel-Apps
Teste die Integration deiner Werbeanzeigen mit deiner App.
Sobald wir eine Werbeanzeigenanfrage von deiner App oder Webseite empfangen, prüfen wir, ob diese den Audience Network-Richtlinien und Facebook-Gemeinschaftsstandards entspricht.
Informationen zum Hinzufügen von Native Ads zu deiner App findest du im Leitfaden zur Native Ad-Vorlage.
Sieh dir unsere Codebeispiele für die Verwendung von Native Ads an. Die NativeBannerAdSample steht als Teil des SDK zur Verfügung und befindet sich im Ordner AudienceNetwork/samples. Importiere das Projekt in deine IDE und führe es auf einem Gerät oder im Emulator aus.
Weitere Ressourcen |
Leitfaden für erste SchritteTechnischer Leitfaden für die ersten Schritte mit Audience Network CodebeispieleBeispiele für die Integration von Audience Network-Werbeanzeigen | FAQFAQ zu Audience Network Vorlage für Native AdsZur Vereinfachung der Integration von Native Ads |