Banneranzeigen einrichten

Banneranzeigen sind rechteckige Anzeigen, die einen Teil des App-Layouts einnehmen. Adaptive Ankerbanner sind Anzeigen mit einem festen Seitenverhältnis, die auf dem Bildschirm bleiben, während Nutzer mit der App interagieren. Sie sind entweder oben oder unten auf dem Bildschirm verankert.

In diesem Leitfaden wird beschrieben, wie Sie eine adaptive Ankerbanneranzeige in eine Android-App laden.

Vorbereitung

Immer mit Testanzeigen testen

Verwenden Sie beim Erstellen und Testen Ihrer Apps Testanzeigen anstelle von Live-Anzeigen. Andernfalls kann es zu einer Sperrung Ihres Kontos kommen.

Testanzeigen lassen sich unter Android am einfachsten mit unserer speziellen Test-Anzeigenblock-ID für Banner laden:

ca-app-pub-3940256099942544/9214589741

Sie ist speziell so konfiguriert, dass für jede Anfrage Testanzeigen zurückgegeben werden. Sie können sie in Ihren eigenen Apps beim Programmieren, Testen und Debuggen verwenden. Ersetzen Sie sie vor der Veröffentlichung Ihrer App durch Ihre eigene Anzeigenblock-ID.

Weitere Informationen zur Funktionsweise von GMA Next-Gen SDK-Testanzeigen finden Sie unter Testanzeigen aktivieren.

AdView-Objekt erstellen

So zeigen Sie Banner an:

Kotlin

  1. Erstellen Sie ein AdView-Objekt.
  2. Fügen Sie das Objekt AdView zum Layout Ihrer App hinzu.

Im folgenden Beispiel wird das Objekt AdView erstellt und einem App-Layout hinzugefügt:

private fun createAdView(adViewContainer: FrameLayout, activity: Activity) {
  val adView = AdView(activity)
  adViewContainer.addView(adView)
}

Java

  1. Erstellen Sie ein AdView-Objekt.
  2. Fügen Sie das Objekt AdView zum Layout Ihrer App hinzu.

Im folgenden Beispiel wird das Objekt AdView erstellt und einem App-Layout hinzugefügt:

private void createAdView(FrameLayout adViewContainer, Activity activity) {
  AdView adView = new AdView(activity);
  adViewContainer.addView(adView);
}

XML-Layout

Fügen Sie der XML-Layoutdatei ein AdView-Element hinzu:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <com.google.android.libraries.ads.mobile.sdk.banner.AdView
      android:id="@+id/adView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Jetpack Compose

  1. Erstellen Sie ein AdView-Objekt in einem remember-Block.
  2. Fügen Sie ein AndroidView-Element in die Compose-UI ein, um das AdView-Objekt anzuzeigen:
val context = LocalContext.current
val adView = remember { AdView(context) }

// The AdView is placed at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) {
    // Display the ad within an AndroidView.
    AndroidView(modifier = modifier.wrapContentSize(), factory = { adView })
  }
}

Anzeige laden

Im folgenden Beispiel wird eine adaptive Ankerbanneranzeige mit einer Breite von 360 in ein AdView-Objekt geladen:

Kotlin

private fun loadBannerAd(adView: AdView, activity: Activity) {
  // Get a BannerAdRequest for a 360 wide large anchored adaptive banner ad.
  val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(activity, 360)
  val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()

  adView.loadAd(
    adRequest,
    object : AdLoadCallback<BannerAd> {
      override fun onAdLoaded(ad: BannerAd) {
        Log.d(TAG, "Banner ad loaded.")
      }

      override fun onAdFailedToLoad(adError: LoadAdError) {
        Log.d(TAG, "Banner ad failed to load: $adError")
      }
    },
  )
}

Java

private void loadBannerAd(AdView adView, Activity activity) {
  // Get a BannerAdRequest for a 360 wide large anchored adaptive banner ad.
  AdSize adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(activity, 360);
  BannerAdRequest adRequest = new BannerAdRequest.Builder(AD_UNIT_ID, adSize).build();

  adView.loadAd(
      adRequest,
      new AdLoadCallback<BannerAd>() {
        @Override
        public void onAdLoaded(@NonNull BannerAd bannerAd) {
          Log.d(TAG, "Banner ad loaded.");
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError adError) {
          Log.d(TAG, "Banner ad failed to load: " + adError);
        }
      });
}

Jetpack Compose

// Request a large anchored adaptive banner with a width of 360.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(context, 360)

// Load the ad when the screen is active.
val isPreviewMode = LocalInspectionMode.current
LaunchedEffect(adSize) {
  if (!isPreviewMode) {
    val adRequest = BannerAdRequest.Builder(AD_UNIT_ID, adSize).build()
    adView.loadAd(
      adRequest,
      object : AdLoadCallback<BannerAd> {
        override fun onAdLoaded(ad: BannerAd) {
          Log.d(Constant.TAG, "Banner ad loaded.")
        }

        override fun onAdFailedToLoad(adError: LoadAdError) {
          Log.w(Constant.TAG, "Banner ad failed to load: $adError")
        }
      },
    )
  }
}

Legen Sie eine Anzeigengröße fest, die kleiner oder gleich der Bildschirmgröße des Geräts ist. Verwenden Sie die Methode Resources.getDisplayMetrics, um die maximale Bildschirmgröße zu ermitteln. Für die Abmessungen des AdSize-Objekts werden dichteunabhängige Pixel (dp) verwendet. Rechnen Sie die Bildschirmgröße beim Vergleichen von Pixel in dp um. Weitere Informationen zu Größenbeschränkungen finden Sie unter Größenanforderungen für Anzeigenanfragen.

Anzeige aktualisieren

Wenn Sie Ihren Anzeigenblock so konfiguriert haben, dass er aktualisiert wird, müssen Sie keine weitere Anzeige anfordern, wenn die Anzeige nicht geladen werden kann. GMA Next-Gen SDK berücksichtigt alle Aktualisierungsraten, die Sie in der AdMob-Benutzeroberfläche angegeben haben. Wenn Sie die Aktualisierung nicht aktiviert haben, stellen Sie eine neue Anfrage. Weitere Informationen zur Aktualisierung von Anzeigenblöcken, z. B. zum Festlegen einer Aktualisierungsrate, finden Sie unter Automatische Aktualisierung für Banneranzeigen verwenden.

Anzeigenressource freigeben

Wenn Sie eine Banneranzeige nicht mehr benötigen, können Sie die Ressourcen der Banneranzeige freigeben.

Wenn Sie die Ressource der Anzeige freigeben möchten, entfernen Sie die Anzeige aus der Ansichtshierarchie und löschen Sie alle Verweise:

Kotlin

private fun destroyBanner() {
  // Remove banner from view hierarchy.
  val parentView = adView?.parent
  if (parentView is ViewGroup) {
    parentView.removeView(adView)
  }

  // Destroy the banner ad resources.
  adView?.destroy()

  // Drop reference to the banner ad.
  adView = null
}

Java

private void destroyBanner() {
  // Remove banner from view hierarchy.
  if (adView != null) {
    if (adView.getParent() instanceof ViewGroup) {
      ((ViewGroup) adView.getParent()).removeView(adView);
    }

    // Destroy the banner ad resources.
    adView.destroy();
  }

  // Drop reference to the banner ad.
  adView = null;
}

Jetpack Compose

// Destroy the ad when the screen is disposed.
DisposableEffect(Unit) { onDispose { adView.destroy() } }

Anzeigenereignisse

Sie können eine Reihe von Ereignissen im Lebenszyklus der Anzeige erfassen, darunter Anzeigenimpressionen und Klicks sowie das Öffnen und Schließen der Anzeige. Es wird empfohlen, den Callback festzulegen, bevor das Banner eingeblendet wird.

Kotlin

override fun onAdLoaded(ad: BannerAd) {
  ad.adEventCallback =
    object : BannerAdEventCallback {
      override fun onAdImpression() {
        // Banner ad recorded an impression.
        Log.d(TAG, "Banner ad recorded an impression.")
      }

      override fun onAdClicked() {
        // Banner ad recorded a click.
        Log.d(TAG, "Banner ad clicked.")
      }

      override fun onAdShowedFullScreenContent() {
        // Banner ad showed.
        Log.d(TAG, "Banner ad showed full screen content.")
      }

      override fun onAdDismissedFullScreenContent() {
        // Banner ad dismissed.
        Log.d(TAG, "Banner ad dismissed full screen content.")
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError
      ) {
        // Banner ad failed to show.
        Log.w(TAG, "Banner ad failed to show full screen content: $fullScreenContentError")
      }
    }
}

Java

@Override
public void onAdLoaded(@NonNull BannerAd bannerAd) {
  bannerAd.setAdEventCallback(
      new BannerAdEventCallback() {
        @Override
        public void onAdImpression() {
          // Banner ad recorded an impression.
          Log.d(TAG, "Banner ad recorded an impression.");
        }

        @Override
        public void onAdClicked() {
          // Banner ad recorded a click.
          Log.d(TAG, "Banner ad clicked.");
        }

        @Override
        public void onAdShowedFullScreenContent() {
          // Banner ad showed.
          Log.d(TAG, "Banner ad showed full screen content.");
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // Banner ad dismissed.
          Log.d(TAG, "Banner ad dismissed full screen content.");
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          // Banner ad failed to show.
          Log.w(
              TAG,
              "Banner ad failed to show full screen content: " + fullScreenContentError);
        }
      });
}

Die BannerAdEventCallback-Schnittstelle verarbeitet Ereignisse für Vollbildinhalte so:

  • In-App-Overlays: GMA Next-Gen SDK-Aufrufe onAdShowedFullScreenContent und onAdDismissedFullScreenContent nur, wenn eine Banneranzeige ein Overlay in Ihrer App präsentiert oder schließt, z. B. eine maximierte MRAID-Anzeige (Mobile Rich Media Ad Interface Definitions) oder ein Datenschutzinfo-Overlay.

  • Externe Navigation:Diese Methoden werden von GMA Next-Gen SDK nicht aufgerufen, wenn ein Anzeigenklick zu einer externen Seite führt, z. B. zu einem externen Browser oder App-Marktplatz. Wenn Sie erkennen möchten, wann ein Nutzer Ihre App verlässt oder zu ihr zurückkehrt, nachdem er auf eine Anzeige geklickt hat, können Sie neben der Methode onAdClicked auch auf App-Lifecycle-Events warten.

Callback für die Anzeigenaktualisierung

Der BannerAdRefreshCallback verarbeitet Ereignisse zur Anzeigenaktualisierung, wenn Sie die automatische Aktualisierung für Banneranzeigen verwenden. Achten Sie darauf, den Callback festzulegen, bevor Sie die Anzeigenansicht der Ansichtshierarchie hinzufügen. Weitere Informationen zum Aktualisieren von Anzeigen finden Sie unter Anzeige aktualisieren.

Kotlin

adView.loadAd(
  adRequest,
  object : AdLoadCallback<BannerAd> {
    override fun onAdLoaded(ad: BannerAd) {
      ad.bannerAdRefreshCallback =
        object : BannerAdRefreshCallback {
          override fun onAdRefreshed() {
            // Banner ad refreshed.
            Log.d(TAG, "Banner ad refreshed.")
          }

          override fun onAdFailedToRefresh(adError: LoadAdError) {
            // Banner ad failed to refresh.
            Log.w(TAG, "Banner ad failed to refresh: $adError")
          }
        }
    }

    override fun onAdFailedToLoad(adError: LoadAdError) {
      // Banner ad failed to load.
      Log.w(TAG, "Banner ad failed to load: $adError")
    }
  },
)

Java

adView.loadAd(
    adRequest,
    new AdLoadCallback<BannerAd>() {
      @Override
      public void onAdLoaded(@NonNull BannerAd bannerAd) {
        bannerAd.setBannerAdRefreshCallback(
            new BannerAdRefreshCallback() {
              @Override
              public void onAdRefreshed() {
                // Banner ad refreshed.
                Log.d(TAG, "Banner ad refreshed.");
              }

              @Override
              public void onAdFailedToRefresh(@NonNull LoadAdError adError) {
                // Banner ad failed to refresh.
                Log.w(TAG, "Banner ad failed to refresh: " + adError);
              }
            });
      }

      @Override
      public void onAdFailedToLoad(@NonNull LoadAdError adError) {
        // Banner ad failed to load.
        Log.w(TAG, "Banner ad failed to load: " + adError);
      }
    });

Hardwarebeschleunigung für Videoanzeigen

Damit Videoanzeigen in Ihren Banneranzeigenansichten erfolgreich ausgeliefert werden können, muss die Hardwarebeschleunigung aktiviert sein.

Die Hardwarebeschleunigung ist standardmäßig aktiviert, kann aber in einigen Apps deaktiviert werden. Wenn dies auf Ihre App zutrifft, empfehlen wir, die Hardwarebeschleunigung für Activity-Klassen zu aktivieren, in denen Anzeigen verwendet werden.

Hardwarebeschleunigung aktivieren

Wenn Ihre App bei global aktivierter Hardwarebeschleunigung nicht ordnungsgemäß funktioniert, können Sie diese auch für einzelne Aktivitäten ein- und ausschalten. Verwenden Sie das Attribut android:hardwareAccelerated für die Elemente <application> und <activity> in Ihrem AndroidManifest.xml, um die Hardwarebeschleunigung zu aktivieren oder zu deaktivieren. Im folgenden Beispiel wird die Hardwarebeschleunigung für die gesamte App aktiviert, aber für eine Aktivität deaktiviert:

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

Weitere Informationen zu Optionen zum Steuern der Hardwarebeschleunigung finden Sie im Leitfaden zur Hardwarebeschleunigung. Einzelne Anzeigenaufrufe können nicht für die Hardwarebeschleunigung aktiviert werden, wenn die Aktivität deaktiviert ist. Die Aktivität selbst muss also die Hardwarebeschleunigung aktiviert haben.

Laden Sie die Beispiel-App herunter, die die Verwendung des GMA Next-Gen SDK veranschaulicht, und führen Sie sie aus.