Das Google Mobile Ads SDK unterstützt auch benutzerdefinierte Designs. Falls in Ihrer App bereits das Google Mobile Ads SDK eingesetzt wird, sollten Sie stattdessen die Version des AFSMA SDK verwenden.
Wenn Sie von 18.1.0 oder niedriger auf Version 19.0.0 oder höher aktualisieren, lesen Sie bitte unsere Migrationsanleitung.
Voraussetzungen
In diesem Implementierungsleitfaden wird davon ausgegangen, dass Sie mit Folgendem vertraut sind:
- Benutzerdefinierte AdSense-Suchanzeigen mit benutzerdefinierten Designs
- Android-App-Entwicklung
AFS Native SDK importieren
SDK hinzufügen
So fügen Sie Ihrer App das AFS Native SDK hinzu:
Öffnen Sie die Datei build.gradle
im Verzeichnis Ihres Anwendungsmoduls.
Fügen Sie unter dependencies
eine neue Build-Regel für die neueste SDK-Version hinzu:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
Achten Sie darauf, dass Ihr build.gradle
auf oberster Ebene einen Verweis auf das Repository google()
oder auf maven { url "https://maven.google.com" }
enthält.
Folgen Sie dieser Anleitung, um das eigenständige Versionsabgleich-Plug-in von Google Play in Ihr Projekt aufzunehmen.
Die Anwendung dieses Plug-ins führt zu einem Gradle-Build-Fehler, wenn das AFS Native SDK mit einer inkompatiblen Version der Google Play-Dienste verwendet wird. Die App darf dann nicht erstellt werden, verursacht aber möglicherweise Laufzeitabsturz. Alternativ kannst du die ResolutionStrategy failOnVersionConflict()
auf dein Projekt anwenden, um einen Build-Fehler zu verursachen, wenn in deinem Projekt inkompatible Versionen der Google Play-Dienste verwendet werden.
Speichern Sie die Änderungen und klicken Sie in der Symbolleiste auf Sync Project with Gradle Files.
AndroidX anstelle von Android-Supportbibliotheken verwenden
Ab Version 17.0.0
des SDKs muss deine App Jetpack-Bibliotheken (AndroidX) anstelle von Android-Supportbibliotheken verwenden. Kompatibilitätsanforderungen:
- Legen Sie
com.android.tools.build:gradle
auf Version 3.2.1 oder höher fest. - Setze
compileSdkVersion
auf 28 oder höher. - Aktualisieren Sie Ihre App für die Verwendung von Jetpack (AndroidX). Folgen Sie der Anleitung unter Zu AndroidX migrieren.
Kurse
Implementieren Sie die folgenden Klassen, um native AFS-Anzeigen in Ihrer App auszuliefern:
- Diese Klasse ist für die asynchrone Anforderung von Anzeigen, das Caching und Abrufen von Anzeigen sowie das Rendern von Anzeigen verantwortlich.
- Für jeden Anzeigenkontext ist eine separate
SearchAdController
erforderlich. Wenn Sie beispielsweise einen Bildschirm haben, auf dem Anzeigen neben einer Liste mit Suchergebnissen angezeigt werden, und ein weiterer Bildschirm, auf dem Anzeigen zusammen mit Details zu einem bestimmten Produkt zu sehen sind, sollten Sie zwei separate Instanzen vonSearchAdController
erstellen – eine für jeden Fall. - Dem Konstruktor müssen der Web-Property-Code (Publisher-ID), die Stil-ID, die auf zurückgegebene Anzeigen angewendet werden soll, und
SearchAdOptions
angegeben werden. Die im Konstruktor angegebeneContext
muss dieActivity
sein, die dieSearchAdController
enthält und wo Sie dieView
der Anzeige platzieren. - Rufen Sie
loadAds
auf, um auf eine neue Nutzersuche hinzuweisen und eine asynchrone Anzeigenanfrage zu initiieren. Alle Anzeigen, die bei früheren Aufrufen vonloadAds
geladen wurden, werden bei einem neuen Aufruf aus dem internen Anzeigen-Cache gelöscht. - Erstellen Sie eine
View
mitcreateAdView
, um Anzeigen-Creatives zu präsentieren. - Nachdem die Anzeigen geladen wurden, rufen Sie
populateAdView
mit einerView
auf, die zuvor mitcreateAdView
generiert wurde, um eine im Cache gespeicherte Anzeige in diesemView
zu rendern. Geben Sie zusätzlich zu demView
, das ausgefüllt werden soll, einenadKey
an. Das ist ein beliebiger String, um die Anzeige eindeutig zu identifizieren. Dadurch wird das spezifische Creative, das aus dem Cache zurückgegeben wurde, mit demadKey
verknüpft. Wenn also dieselbeadKey
an einen zukünftigen Aufruf vonpopulateAdView
übergeben wird, wird dieselbe Anzeige zurückgegeben. Wenn beispielsweisepopulateAdView
zum ersten Mal mitadKey="keyA"
aufgerufen wird und eine Anzeige für Wanderstiefel darstellt, wird bei jedem nachfolgenden Aufruf vonpopulateAdView
mitadKey="keyA"
dieselbe Anzeige für Wanderstiefel dargestellt. Durch einen neuen Aufruf vonloadAds
werden alle im Cache gespeicherten Anzeigen und die zugehörigen Anzeigenschlüssel gelöscht.
- Übergeben Sie dieses Objekt an den
SearchAdController
-Konstruktor, um anzupassen, wie Anzeigen angefordert und dargestellt werden. Rufen Siebuild()
für eineSearchAdOptions.Builder
auf, um einSearchAdOptions
-Objekt zu erstellen.
View
- Erstellen Sie ein
View
-Objekt für Anzeigen, indem SiecreateAdView()
für dieSearchAdController
aufrufen. Zeigt maximal eine Anzeige gleichzeitig an, aber dieselbeView
kann wiederverwendet werden, um im Laufe der Zeit unterschiedliche Anzeigen auszuliefern.
- Rufen Sie die Methode
loadAds
für dieSearchAdController
mit einemSearchAdRequest
auf, um eine asynchrone Anzeigenanfrage zu initiieren. Rufen Siebuild()
für einSearchAdRequest.Builder
auf, um einSearchAdRequest
-Objekt zu erstellen.
- Implementieren Sie diese Schnittstelle und übergeben Sie sie an den
SearchAdController
-Konstruktor, um Callbacks für mehrere Status zu registrieren. - Hinweis:
AdListener
-Callbacks werden bei einer abgebrochenen Anfrage nicht aufgerufen (ein Aufruf vonloadAds
, der durch einen anderen Aufruf vonloadAds
vorzeitig beendet wurde, bevor der erste Aufruf aufgelöst wurde).
Beispielimplementierung
Im folgenden Beispiel wird gezeigt, wie eine SearchAdController
in einem Activity
-Beispiel erstellt wird.
// MainActivity.java implementation
// (MainActivity is a subclass of Activity)
SearchAdController adController;
// adContainer where we will place our ads in this example.
ViewGroup adContainer;
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
adContainer = (ViewGroup) findViewById(...);
// Specify ad options (not required).
SearchAdOptions.Builder adOptionsBuilder = new SearchAdOptions.Builder();
adOptionsBuilder.setAdType(SearchAdOptions.AD_TYPE_TEXT);
adOptionsBuilder.setPrefetch(true);
adOptionsBuilder.setNumAdsRequested(3);
// Provide a callback to trigger when ads are loaded.
AdListener adListener = new AdListener() {
public void onAdLoaded() {
createAndShowAd();
}
};
// Instantiate the SearchAdController.
adController = new SearchAdController(this, "your-client-id", "your-style-id",
adOptionsBuilder.build(), adListener);
}
Wenn der Nutzer eine Anfrage initiiert, erstellen Sie eine SearchAdRequest
und rufen Sie loadAds
auf der SearchAdController
auf, um eine asynchrone Anzeigenanfrage zu starten.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
Implementieren Sie den onAdLoaded
-Callback, damit eine geladene Anzeige in eine Anzeigenansicht eingefügt wird.
private void createAndShowAd() {
// Create a new view that will contain the ad.
View adView = adController.createAdView();
// Attach the new view to the view hierarchy.
adContainer.addView(adView);
// Display the ad inside the adView. We need to provide an adKey to
// indicate which ad is to be displayed in the adView. In this example,
// since we only have one ad, we can provide any constant string. However,
// if you intend to display multiple ads, each ad you wish to display
// should be given a unique adKey of your choosing.
adController.populateAdView(adView, "demoAd");
}
Eine Anzeige, die sich auf die betreffende Suchanfrage bezieht, wird nun im adView
geschaltet.
Fehler untersuchen
Für SearchAdController
ist ein AdListener
-Objekt mit der Methode onAdLoaded()
erforderlich, um deine App darüber zu informieren, dass Anzeigen ausgeliefert werden können. Sie sollten auch die Methode onAdFailedToLoad()
implementieren, damit Sie Fehler erkennen und korrigieren können.
Sie können beispielsweise den folgenden AdListener
verwenden, um Fehler in Ihrer Implementierung zu beheben:
AdListener adListener = new AdListener() {
public void onAdLoaded() {
// Called when an ad is loaded.
Toast.makeText(MainActivity.this, "Ad Loaded",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Loaded");
}
public void onAdLeftApplication() {
// Called when an ad leaves the application
// (to go to the browser for example).
Toast.makeText(MainActivity.this, "Ad Left Application",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Left Application");
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Called when an ad request failed.
Toast.makeText(MainActivity.this, "Ad Failed to Load: " + errorCode,
Toast.LENGTH_SHORT).show();
Log.e(MainActivity.class.getSimpleName(), "Ad Failed to Load: " +
errorCode);
}
};
Konstanten, die in der onAdFailedToLoad()
-Callback-Methode verwendet werden, werden im AdListener definiert.