Banneranzeigen sind rechteckige Anzeigen, die einen Teil der App-Oberfläche einnehmen. Sie bleiben auf dem Bildschirm, während Nutzer mit der App interagieren. Sie sind entweder oben oder unten auf dem Bildschirm verankert oder inline mit dem Inhalt, wenn der Nutzer scrollt. Banneranzeigen können nach einer bestimmten Zeit automatisch aktualisiert werden. Weitere Informationen finden Sie unter Übersicht über Banneranzeigen.
In diesem Leitfaden erfahren Sie, wie Sie mit verankerten adaptiven Banneranzeigen die Leistung maximieren, indem Sie die Anzeigengröße für jedes Gerät mit der von Ihnen festgelegten Anzeigenbreite optimieren.
Verankerte adaptive Banneranzeigen sind Anzeigen mit festem Seitenverhältnis und keine regulären Anzeigen mit fester Größe. Das Seitenverhältnis entspricht dem Branchenstandard 320 x 50. Sobald Sie die volle Breite angegeben haben, wird eine Anzeige mit der optimalen Höhe für diese Breite zurückgegeben. Die optimale Höhe ändert sich bei den Anfragen von demselben Gerät nicht und die umgebenden Ansichten müssen sich bei der Aktualisierung der Anzeige nicht verschieben.
Voraussetzungen
- Arbeiten Sie den Startleitfaden durch.
Immer mit Testanzeigen testen
Verwenden Sie beim Entwickeln und Testen Ihrer Apps Testanzeigen und keine Produktionsanzeigen. Andernfalls kann Ihr Konto gesperrt werden.
Testanzeigen lassen sich am einfachsten mit unserer Testanzeigenblock-ID für Android-Banner laden:
/6499/example/adaptive-banner
Sie wurde speziell so konfiguriert, dass bei jeder Anfrage Testanzeigen zurückgegeben werden. Sie können die Funktion in Ihren eigenen Apps beim Programmieren, Testen und Debuggen verwenden. Ersetzen Sie sie jedoch vor der Veröffentlichung Ihrer App durch Ihre Anzeigenblock-ID.
Weitere Informationen zur Funktionsweise von Testanzeigen des Mobile Ads SDK findest du unter Testanzeigen.
AdView zum Layout hinzufügen
Der erste Schritt zur Auslieferung eines Banners besteht darin, AdManagerAdView
im Layout für Activity
oder Fragment
zu platzieren, in dem das Banner angezeigt werden soll:
Java
private AdSize getAdSize() {
// Determine the screen width (less decorations) to use for the ad width.
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
float density = outMetrics.density;
float adWidthPixels = adContainerView.getWidth();
// If the ad hasn't been laid out, default to the full screen width.
if (adWidthPixels == 0) {
adWidthPixels = outMetrics.widthPixels;
}
int adWidth = (int) (adWidthPixels / density);
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
}
private void loadBanner() {
// Create a new ad view.
AdManagerAdView adView = new AdManagerAdView(this);
adView.setAdSizes(getAdSize());
adView.setAdUnitId("/6499/example/adaptive-banner");
// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);
// Start loading the ad in the background.
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
}
Kotlin
// Determine the screen width (less decorations) to use for the ad width.
// If the ad hasn't been laid out, default to the full screen width.
private val adSize: AdSize
get() {
val display = windowManager.defaultDisplay
val outMetrics = DisplayMetrics()
display.getMetrics(outMetrics)
val density = outMetrics.density
var adWidthPixels = binding.adViewContainer.width.toFloat()
if (adWidthPixels == 0f) {
adWidthPixels = outMetrics.widthPixels.toFloat()
}
val adWidth = (adWidthPixels / density).toInt()
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
}
private fun loadBanner() {
// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adSizes = adSize
adView.adUnitId = "/6499/example/adaptive-banner"
// Create an ad request.
val adRequest = AdManagerAdRequest.Builder().build()
// Start loading the ad in the background.
adView.loadAd(adRequest)
}
Anzeige laden
Sobald AdView eingerichtet ist, muss im nächsten Schritt eine Anzeige geladen werden. Dazu verwenden Sie die Methode loadAd()
in der Klasse AdManagerAdView
. Dafür wird ein AdManagerAdRequest
-Parameter verwendet, der Laufzeitinformationen zu einer einzelnen Anzeigenanfrage enthält, z. B. Targeting-Informationen.
Das folgende Beispiel zeigt, wie eine Anzeige in der onCreate()
-Methode einer Activity
geladen wird:
Java
private void loadBanner() {
// Create a new ad view.
adView = new AdManagerAdView(this);
adView.setAdUnitId(AD_UNIT);
adView.setAdSize(getAdSize());
// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);
// Start loading the ad in the background.
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
}
Kotlin
private fun loadBanner() {
// This is an ad unit ID for a test ad. Replace with your own banner ad unit ID.
adView.adUnitId = "/6499/example/banner"
adView.setAdSize(adSize)
// Create an ad request.
val adRequest = AdManagerAdRequest.Builder().build()
// Start loading the ad in the background.
adView.loadAd(adRequest)
}
Falls Ihre Anzeige nicht geladen werden kann, müssen Sie nicht explizit eine neue anfordern, sofern Sie den Anzeigenblock für die Aktualisierung konfiguriert haben. Das Google Mobile Ads SDK berücksichtigt jede Aktualisierungsrate, die Sie auf der Ad Manager-Weboberfläche angegeben haben. Wenn Sie die Aktualisierung nicht aktiviert haben, müssen Sie eine neue Anfrage senden.
Fertig! In Ihrer App können jetzt Banneranzeigen ausgeliefert werden.
Anzeigenereignisse
Im Lebenszyklus der Anzeige können Sie auf eine Reihe von Ereignissen warten, z. B. das Laden, die Anzeigenimpression und den Klick sowie das Öffnen und Schließen von Anzeigen. Wir empfehlen, den Callback vor dem Laden des Banners festzulegen.Java
AdManagerAdView.setAdListener(new AdListener() {
@Override
public void onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
@Override
public void onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
@Override
public void onAdFailedToLoad(LoadAdError adError) {
// Code to be executed when an ad request fails.
}
@Override
public void onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
@Override
public void onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
});
Kotlin
AdManagerAdView.adListener = object: AdListener() {
override fun onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
override fun onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
override fun onAdFailedToLoad(adError : LoadAdError) {
// Code to be executed when an ad request fails.
}
override fun onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
override fun onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
override fun onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
}
Jede der überschreibbaren Methoden in AdListener
entspricht einem Ereignis im Lebenszyklus einer Anzeige.
Überschreibbare Methoden | |
---|---|
onAdClicked() |
Die Methode onAdClicked() wird aufgerufen, wenn ein Klick für eine Anzeige erfasst wird.
|
onAdClosed() |
Die Methode onAdClosed() wird aufgerufen, wenn ein Nutzer nach dem Ansehen der Ziel-URL einer Anzeige zur App zurückkehrt. Deine App kann damit angehaltene Aktivitäten fortsetzen oder andere Arbeiten ausführen, die erforderlich sind, um sich auf eine Interaktion vorzubereiten.
|
onAdFailedToLoad() |
Die Methode onAdFailedToLoad() ist die einzige Methode, die einen Parameter enthält. Der Fehlerparameter vom Typ LoadAdError beschreibt, welcher Fehler aufgetreten ist. Weitere Informationen finden Sie in der Dokumentation zum Beheben von Fehlern beim Laden von Anzeigen.
|
onAdImpression() |
Die Methode onAdImpression() wird aufgerufen, wenn eine Impression für eine Anzeige erfasst wird.
|
onAdLoaded() |
Die Methode onAdLoaded() wird ausgeführt, wenn das Laden einer Anzeige abgeschlossen ist. Hier kannst du das Hinzufügen von AdManagerAdView zu deiner Aktivität oder deinem Fragment so lange verzögern, bis du dir sicher bist, dass eine Anzeige geladen wird.
|
onAdOpened() |
Die Methode onAdOpened() wird aufgerufen, wenn durch eine Anzeige ein Overlay geöffnet wird, das den Bildschirm bedeckt.
|
Hardwarebeschleunigung für Videoanzeigen
Damit Videoanzeigen in den Ansichten Ihrer Banneranzeigen ausgeliefert werden, muss die Hardwarebeschleunigung aktiviert sein.
Die Hardwarebeschleunigung ist standardmäßig aktiviert, kann jedoch von einigen Apps deaktiviert werden. Wenn das auf Ihre App zutrifft, empfehlen wir, die Hardwarebeschleunigung für Activity
-Klassen zu aktivieren, in denen Anzeigen verwendet werden.
Hardwarebeschleunigung aktivieren
Wenn sich Ihre App bei global aktivierter Hardwarebeschleunigung nicht ordnungsgemäß verhält, können Sie sie auch für einzelne Aktivitäten steuern. Zum Aktivieren oder Deaktivieren der Hardwarebeschleunigung können Sie das Attribut android:hardwareAccelerated
für die Elemente <application>
und <activity>
in AndroidManifest.xml
verwenden. 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 zur Steuerung der Hardwarebeschleunigung finden Sie im Leitfaden zur Hardwarebeschleunigung. Für einzelne Anzeigenansichten kann die Hardwarebeschleunigung nicht aktiviert werden, wenn die Aktivität deaktiviert ist. Daher muss für die Aktivität selbst die Hardwarebeschleunigung aktiviert sein.
Manuelle Impressionszählung
Das manuelle Zählen von Impressionen ist nur mit direkt verkauften und hausinternen Kampagnen mit Creatives kompatibel, die direkt in Ad Manager getraffickt werden. Er sollte nicht für Backfill-Anzeigen oder Anzeigen in Drittanbieter-Werbenetzwerken verwendet werden. Weitere Informationen finden Sie unter Impressionen und Klicks zählen.
Sie können Impressions-Pings manuell an Ad Manager senden, wenn eine Impression unter besonderen Bedingungen erfasst werden soll. Dazu müssen Sie vor dem Laden einer Anzeige ein AdManagerAdRequest
für manuelle Impressionen aktivieren:
Java
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
.setManualImpressionsEnabled(true)
.build();
Kotlin
val adRequest = AdManagerAdRequest.Builder()
.setManualImpressionsEnabled(true)
.build()
Wenn Sie feststellen, dass eine Anzeige zurückgegeben wurde und auf dem Bildschirm zu sehen ist, können Sie eine Impression manuell erfassen:
Java
{ ad_view }.recordManualImpression();
Kotlin
AdManagerAdView.recordManualImpression()
App-Ereignisse
Mit App-Ereignissen können Sie Anzeigen erstellen, über die Nachrichten an den App-Code gesendet werden. Anhand dieser Nachrichten kann die App dann Aktionen ausführen.
Mit AppEventListener
können Sie Ad Manager-spezifische App-Ereignisse erfassen.
Diese Ereignisse können im Lebenszyklus der Anzeige jederzeit auftreten, sogar vor dem Aufruf von onAdLoaded()
.
Java
public interface AppEventListener {
void onAppEvent(String name, String info);
}
Kotlin
interface AppEventListener {
fun onAppEvent(name: String, info: String)
}
void onAppEvent(String name, String info)
wird aufgerufen, wenn ein App-Ereignis in einer Anzeige auftritt. Diese Schnittstelle kann durch Ihre Activity oder ein anderes Objekt implementiert werden:
Java
import com.google.android.gms.ads.admanager.*;
public class BannerExample extends Activity implements AppEventListener {
}
Kotlin
import com.google.android.gms.ads.admanager.*
class BannerExample : Activity(), AppEventListener {
}
und dann an AdManagerAdView
übergeben:
Java
AdManagerAdView.setAppEventListener(this);
Kotlin
AdManagerAdView.appEventListener = this
Das folgende Beispiel zeigt, wie Sie die Hintergrundfarbe Ihrer App in Abhängigkeit von einem App-Ereignis mit einem Farbnamen ändern können:
Java
@Override
public void onAppEvent(String name, String info) {
if ("color".equals(name)) {
if ("green".equals(info)) {
// Set background color to green.
} else if ("blue".equals(info)) {
// Set background color to blue.
} else {
// Set background color to black.
}
}
}
Kotlin
override fun onAppEvent(name: String?, info: String?) {
if (name == "color") {
when (info) {
"green" -> {
// Set background color to green.
}
"blue" -> {
// Set background color to blue.
}
else -> {
// Set background color to black.
}
}
}
}
Und dies ist das entsprechende Creative, das App-Ereignisnachrichten mit der Farbe an den Listener sendet:
<html>
<head>
<script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Send a color=green event when ad loads.
admob.events.dispatchAppEvent("color", "green");
document.getElementById("ad").addEventListener("click", function() {
// Send a color=blue event when ad is clicked.
admob.events.dispatchAppEvent("color", "blue");
});
});
</script>
<style>
#ad {
width: 320px;
height: 50px;
top: 0px;
left: 0px;
font-size: 24pt;
font-weight: bold;
position: absolute;
background: black;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div id="ad">Carpe diem!</div>
</body>
</html>
Eine Implementierung von App-Ereignissen in der API Demo App finden Sie im Beispiel zu Ad Manager-App-Ereignissen.
Zusätzliche Ressourcen
Beispiele auf GitHub
Nächste Schritte
Minimierbare Banner
Minimierbare Banneranzeigen sind Banneranzeigen, die anfänglich als größeres Overlay dargestellt werden und eine Schaltfläche zum Minimieren der Anzeige haben. Erwägen Sie, damit die Leistung weiter zu optimieren. Weitere Informationen finden Sie unter Minimierbare Banneranzeigen.
Adaptive Inline-Banner
Adaptive Inline-Banner sind im Vergleich zu verankerten adaptiven Bannern größere und höhere Banner. Sie haben eine variable Höhe und können so hoch wie der Gerätebildschirm sein. Adaptive Inline-Banner werden gegenüber verankerten adaptiven Banneranzeigen für Apps empfohlen, bei denen Banneranzeigen in scrollbaren Inhalten platziert werden. Weitere Informationen finden Sie unter Adaptive Inline-Banner.