Erweiterte native Anzeigen

Native Anzeige ausliefern

Wenn eine native Anzeige geladen wird, ruft das Google Mobile Ads SDK den Listener für das entsprechende Anzeigenformat auf. Ihre App ist dann für die Auslieferung der Anzeige verantwortlich, aber nicht unbedingt sofort. Das SDK bietet einige nützliche Ressourcen, die das Einblenden systemdefinierter Anzeigenformate erleichtern. Sie werden unten beschrieben.

Klasse NativeAdView

Für das NativeAd-Format gibt es die entsprechende Klasse NativeAdView. Dieser Kurs ist ein ViewGroup das Publisher als Stamm für NativeAd verwenden sollten. A einzelne NativeAdView entspricht einer einzelnen nativen Anzeige. Jede Ansicht, die zum Darstellen der Assets dieser Anzeige verwendet wird (z. B. die ImageView, in der das Screenshot-Asset angezeigt wird), sollte ein untergeordnetes Element des NativeAdView-Objekts sein.

Die Ansichtshierarchie für eine native Anzeige, für die ein LinearLayout Asset-Ansichten anzuzeigen, könnte wie folgt aussehen:

<com.google.android.gms.ads.nativead.NativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:orientation="vertical">
        <LinearLayout
        android:orientation="horizontal">
          <ImageView
           android:id="@+id/ad_app_icon" />
          <TextView
            android:id="@+id/ad_headline" />
         </LinearLayout>
         <!--Add remaining assets such as the image and media view.-->
    </LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>

Hier ein Beispiel, in dem ein NativeAdView erstellt und mit einem NativeAd ausgefüllt wird:

Java

AdLoader.Builder builder = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Assumes you have a placeholder FrameLayout in your View layout
            // (with ID fl_adplaceholder) where the ad is to be placed.
            FrameLayout frameLayout =
                findViewById(R.id.fl_adplaceholder);
            // Assumes that your ad layout is in a file call native_ad_layout.xml
            // in the res/layout folder
            NativeAdView adView = (NativeAdView) getLayoutInflater()
                .inflate(R.layout.native_ad_layout, null);
            // This method sets the assets into the ad view.
            populateNativeAdView(nativeAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }
});

Kotlin

val builder = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // Assumes you have a placeholder FrameLayout in your View layout
        // (with ID fl_adplaceholder) where the ad is to be placed.
        val frameLayout: FrameLayout = findViewById(R.id.fl_adplaceholder)
        // Assumes that your ad layout is in a file call native_ad_layout.xml
        // in the res/layout folder
        val adView = layoutInflater
                .inflate(R.layout.native_ad_layout, null) as NativeAdView
        // This method sets the assets into the ad view.
        populateNativeAdView(nativeAd, adView)
        frameLayout.removeAllViews()
        frameLayout.addView(adView)
    }

Alle Assets für eine bestimmte native Anzeige sollten innerhalb des NativeAdView-Layouts gerendert werden. Das Google Mobile Ads SDK versucht, eine Warnung zu protokollieren, wenn native Assets außerhalb eines Layouts für native Anzeigenaufrufe gerendert werden.

Die Anzeigenansichtsklassen bieten auch Methoden zum Registrieren der Ansicht, die für jedes einzelne Asset verwendet wird, und eine zum Registrieren des NativeAd-Objekts selbst. Wenn die Ansichten auf diese Weise registriert werden, kann das SDK Aufgaben automatisch verarbeiten. Beispiele:

  • Klicks werden erfasst
  • Impressionen werden erfasst, sobald das erste Pixel auf dem Bildschirm sichtbar ist
  • Das Datenschutzinfo-Overlay anzeigen

Datenschutzinfo-Overlay

Dem Anzeigenaufruf wird vom SDK ein Datenschutzinfo-Overlay hinzugefügt. Lassen Sie in der gewünschten Ecke des nativen Anzeigen-Views Platz für das automatisch eingefügte Datenschutzinfo-Logo. Außerdem ist es Es ist wichtig, dass das Datenschutzinfo-Overlay gut zu sehen ist. Wählen Sie daher Hintergrundfarben aus. und Bilder entsprechend anpassen. Weitere Informationen zum Erscheinungsbild und zur Funktion des Overlays finden Sie unter Beschreibungen der Felder für native Anzeigen.

Anzeigenkennzeichnung

Sie müssen eine Anzeigenkennzeichnung einblenden, um darauf hinzuweisen, dass es sich bei dem Aufruf um Werbung handelt. Weitere Informationen finden Sie in unseren Richtlinien. .

Codebeispiel

So stellen Sie eine native Anzeige bereit:

  1. Erstellen Sie eine Instanz der Klasse NativeAdView.
  2. Für jedes Anzeigen-Asset, das ausgeliefert werden soll:

    1. Fügen Sie der Asset-Ansicht das Asset aus dem Anzeigenobjekt hinzu.
    2. Registrieren Sie die Asset-Ansicht mit der Klasse NativeAdView.
  3. Registrieren Sie die MediaView, wenn Ihr natives Anzeigenlayout ein großes Medien-Asset enthält.

  4. Registrieren Sie das Anzeigenobjekt mit der Klasse NativeAdView.

Hier ist eine Beispielfunktion, die ein NativeAd anzeigt:

Java

private void displayNativeAd(ViewGroup parent, NativeAd ad) {

  // Inflate a layout and add it to the parent ViewGroup.
  LayoutInflater inflater = (LayoutInflater) parent.getContext()
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  NativeAdView adView = (NativeAdView) inflater
          .inflate(R.layout.ad_layout_file, parent);

  // Locate the view that will hold the headline, set its text, and call the
  // NativeAdView's setHeadlineView method to register it.
  TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
  headlineView.setText(ad.getHeadline());
  adView.setHeadlineView(headlineView);

  // Repeat the process for the other assets in the NativeAd
  // using additional view objects (Buttons, ImageViews, etc).

  // If the app is using a MediaView, it should be
  // instantiated and passed to setMediaView. This view is a little different
  // in that the asset is populated automatically, so there's one less step.
  MediaView mediaView = (MediaView) adView.findViewById(R.id.ad_media);
  adView.setMediaView(mediaView);

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad);

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews();

  // Place the AdView into the parent.
  parent.addView(adView);
}

Kotlin

fun displayNativeAd(parent: ViewGroup, ad: NativeAd) {

  // Inflate a layout and add it to the parent ViewGroup.
  val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
          as LayoutInflater
  val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView

  // Locate the view that will hold the headline, set its text, and use the
  // NativeAdView's headlineView property to register it.
  val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
  headlineView.text = ad.headline
  adView.headlineView = headlineView

  // Repeat the process for the other assets in the NativeAd using
  // additional view objects (Buttons, ImageViews, etc).

  val mediaView = adView.findViewById<MediaView>(R.id.ad_media)
  adView.mediaView = mediaView

  // Call the NativeAdView's setNativeAd method to register the
  // NativeAdObject.
  adView.setNativeAd(ad)

  // Ensure that the parent view doesn't already contain an ad view.
  parent.removeAllViews()

  // Place the AdView into the parent.
  parent.addView(adView)
}

Hier sind die einzelnen Aufgaben:

  1. Layout maximieren

    Java

    LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    NativeAdView adView = (NativeAdView) inflater
            .inflate(R.layout.ad_layout_file, parent);
    

    Kotlin

    val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
            as LayoutInflater
    val adView = inflater.inflate(R.layout.ad_layout_file, parent) as NativeAdView
    

    Mit diesem Code wird ein XML-Layout aufgebläht, das Ansichten zum Anzeigen einer nativen Anzeige enthält, und dann eine Referenz auf die NativeAdView ermittelt. Sie können auch Sie können eine vorhandene NativeAdView wiederverwenden, wenn sie in Ihrem Fragment oder Ihrer Aktivität vorhanden ist, oder eine Instanz dynamisch ohne Verwendung einer Layoutdatei erstellen.

  2. Asset-Ansichten füllen und registrieren

    In diesem Codebeispiel wird die Ansicht gefunden, die zum Darstellen des Titels verwendet wird. Der Text wird dann mit dem String-Asset festgelegt, das vom Anzeigenobjekt bereitgestellt wird, und beim NativeAdView-Objekt registriert:

    Java

    TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
    headlineView.setText(ad.getHeadline());
    adView.setHeadlineView(headlineView);
    

    Kotlin

    val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
    headlineView.text = ad.headline
    adView.headlineView = headlineView
    

    Dieser Vorgang zum Suchen der Ansicht, Festlegen ihres Werts und Registrieren bei der Anzeigenansichtsklasse sollte für jedes der vom nativen Anzeigenobjekt bereitgestellten Assets wiederholt werden, das in der App angezeigt wird.

  3. Klicks verarbeiten

    Implementieren Sie keine benutzerdefinierten Klick-Handler bei Ansichten über oder innerhalb des Aufruf einer nativen Anzeige. Klicks auf die Assets der Anzeigenansicht werden vom SDK verarbeitet, sofern Sie die Asset-Ansichten wie im vorherigen Abschnitt beschrieben korrekt ausfüllen und registrieren.

    Implementieren Sie den Klick-Callback für das Google Mobile Ads SDK, um auf Klicks zu warten:

    Java

    AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
        // ...
        .withAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(LoadAdError adError) {
                // Handle the failure by logging.
            }
            @Override
            public void onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build();
    

    Kotlin

    val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        // ...
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(adError: LoadAdError) {
                // Handle the failure.
            }
            override fun onAdClicked() {
                // Log the click event or other custom behavior.
            }
        })
        .build()
    
  4. MediaView registrieren

    Sie müssen das MediaView Asset anstelle des ImageView , wenn Sie ein zentrales Bild-Asset in das Layout für Ihre native Anzeige.

    Das MediaView ist ein spezielles View, das zum Anzeigen des Hauptmedien-Assets (Video oder Bild) dient.

    MediaView kann in einem XML-Layout definiert oder dynamisch konstruiert werden. Es sollte innerhalb der Ansichtshierarchie eines NativeAdView platziert werden, andere Asset-Ansicht. Apps, die MediaView verwenden, müssen diese beim NativeAdView:

    Java

     // Populate and register the media asset view.
     nativeAdView.setMediaView(nativeAdBinding.adMedia);
    

    Kotlin

     // Populate and register the media asset view.
     nativeAdView.mediaView = nativeAdBinding.adMedia
    

    ImageScaleType

    Die MediaView-Klasse hat beim Anzeigen ein ImageScaleType-Attribut. Bilder. Wenn Sie ändern möchten, wie ein Bild in der MediaView skaliert wird, legen Sie den entsprechenden ImageView.ScaleType mit der setImageScaleType()-Methode der MediaView fest:

    Java

    mediaView.setImageScaleType(ImageView.ScaleType.CENTER_CROP);
    

    Kotlin

    mediaView.imageScaleType = ImageView.ScaleType.CENTER_CROP
    

    MediaContent

    Die Klasse MediaContent enthält die Daten zu den Medieninhalten der native Anzeige, die mit der Klasse MediaView ausgeliefert wird. Wenn der Parameter Das Attribut MediaView mediaContent wird mit einer MediaContent-Instanz festgelegt:

    • Wenn ein Video-Asset verfügbar ist, wird es gepuffert und in der MediaView wiedergegeben. Ob ein Video-Asset verfügbar ist, siehst du unter hasVideoContent().

    • Wenn die Anzeige kein Video-Asset enthält, wird das mainImage-Asset heruntergeladen. und stattdessen im MediaView platziert.

    Standardmäßig ist mainImage das erste heruntergeladene Bild-Asset. Wenn setReturnUrlsForImageAssets(true) wird verwendet, mainImage ist null und Sie müssen Legen Sie für die Eigenschaft mainImage das manuell heruntergeladene Bild fest. Beachten Sie, dass dies wird nur verwendet, wenn kein Video-Asset verfügbar ist.

  5. Natives Anzeigenobjekt registrieren

    In diesem letzten Schritt wird das native Anzeigenobjekt mit der Ansicht registriert, die für .

    Java

    adView.setNativeAd(ad);
    

    Kotlin

    adView.setNativeAd(ad)
    

Anzeige löschen

Wenn Ihre native Anzeige nicht mehr ausgeliefert wird, sollten Sie sie zerstören, damit die Anzeige ordnungsgemäß bereinigt wird.

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

Beispiele auf GitHub

Vollständige Implementierung von nativen Anzeigen:

Java Kotlin

Nächste Schritte

Sehen Sie sich die folgenden Themen an: