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.
Sieh dir unsere Codebeispiele für das Audience Network auf Android auf Github an. Importiere die Projekte in deine IDE und führe sie auf einem Gerät oder im Emulator aus.
Wenn du bereit bist, deine App live zu schalten und zu Geld zu machen, stelle sicher, dass sie unsere Audience Network-Richtlinien und die Facebook-Gemeinschaftsstandards einhält, und reiche sie dann zur Überprüfung ein.
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 |