Das Google Mobile Ads SDK unterstützt auch benutzerdefinierte Designs. Wenn in Ihrer App bereits das Google Mobile Ads SDK verwendet wird, empfehlen wir, stattdessen die Version des AFSMA SDK zu verwenden.
Wenn Sie ein Upgrade von 18.1.0 oder früher auf Version 19.0.0 oder höher ausführen, finden Sie weitere Informationen in unserer Migrationsanleitung.
Voraussetzungen
In diesem Implementierungsleitfaden wird davon ausgegangen, dass Sie mit Folgendem vertraut sind:
- Benutzerdefinierte AdSense-Suchanzeigen mit benutzerdefinierten Designs
- Entwicklung von Android-Apps
AFS-SDK für native Anzeigen importieren
SDK hinzufügen
So fügen Sie Ihrer App das AFS-SDK für native Anzeigen hinzu:
Öffnen Sie die Datei build.gradle
im Verzeichnis des Anwendungsmoduls.
Fügen Sie für die neueste SDK-Version unter dependencies
eine neue Build-Regel hinzu:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.0.3'
}
Achten Sie darauf, dass die build.gradle
der obersten Ebene einen Verweis auf das google()
-Repository oder auf maven { url "https://maven.google.com" }
enthält.
Folgen Sie dieser Anleitung, um das eigenständige Google Play Version Matcher-Plug-in in Ihr Projekt einzubinden.
Die Anwendung dieses Plug-ins führt zu einem Gradle-Build-Fehler, wenn das native AFS SDK mit einer inkompatiblen Version der Google Play-Dienste verwendet wird. Die App kann nicht erstellt werden, verursacht aber möglicherweise Laufzeitabstürze. Alternativ kannst du die ResolutionStrategy failOnVersionConflict()
auf dein Projekt anwenden, um einen Build-Fehler zu verursachen, wenn in deinem Projekt inkompatible Versionen von Google Play-Diensten verwendet werden.
Speichern Sie die Änderungen und klicken Sie in der Symbolleiste auf Sync Project with Gradle Files (Projekt mit Gradle-Dateien synchronisieren).
AndroidX anstelle von Android Support Libraries verwenden
Ab Version 17.0.0
des SDK muss Ihre App Jetpack (AndroidX) Libraries anstelle von Android Support Libraries verwenden. Anforderungen an kompatible Geräte:
- Setzen Sie
com.android.tools.build:gradle
auf v3.2.1 oder höher. - Legen Sie für
compileSdkVersion
mindestens 28 fest. - Aktualisieren Sie Ihre Anwendung 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 hat die Aufgabe, Anzeigen asynchron anzufordern, Anzeigen im Cache zu speichern und abzurufen sowie Anzeigen zu rendern.
- Für jeden Anzeigenkontext ist eine separate
SearchAdController
erforderlich. Wenn Sie beispielsweise einen Bildschirm haben, auf dem Anzeigen neben einer Liste von Suchergebnissen und ein anderer Bildschirm mit Details für ein bestimmtes Produkt zu sehen sind, sollten Sie zwei separate Instanzen vonSearchAdController
erstellen, eine für jeden Fall. - Dem Konstruktor muss der Web-Property-Code (Publisher-ID), die Stil-ID für die zurückgegebenen Anzeigen und
SearchAdOptions
bereitgestellt werden. Die im Konstruktor angegebeneContext
muss dasActivity
-Element sein, das dieSearchAdController
enthält und wo die AnzeigeView
platziert wird. - Rufen Sie
loadAds
auf, um eine neue Nutzersuche anzugeben und eine asynchrone Anzeigenanfrage zu initiieren. Alle Anzeigen, die aus vorherigen 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. - Sobald die Anzeigen geladen sind, rufen Sie
populateAdView
mit einemView
auf, das zuvor mitcreateAdView
generiert wurde, um eine im Cache gespeicherte Anzeige in dieserView
zu rendern. Geben Sie zusätzlich zu dem auszufüllendenView
einenadKey
an. Dies ist ein beliebiger String zur eindeutigen Identifizierung der Anzeige. Dadurch wird die aus dem Cache zurückgegebene Anzeige mit dieseradKey
verknüpft. Wenn dieselbeadKey
an einen zukünftigen Aufruf vonpopulateAdView
übergeben wird, wird dieselbe Anzeige zurückgegeben. Wenn beispielsweisepopulateAdView
zum ersten Mal mitadKey="keyA"
aufgerufen und eine Anzeige für Wanderstiefel gerendert wird, wird bei jedem nachfolgenden Aufruf vonpopulateAdView
mitadKey="keyA"
dieselbe Anzeige für Wanderstiefel präsentiert. 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 Konstruktor
SearchAdController
, um anzupassen, wie Anzeigen angefordert und dargestellt werden. Rufen Siebuild()
für einSearchAdOptions.Builder
auf, um einSearchAdOptions
-Objekt zu erstellen.
View
- Erstellen Sie ein
View
-Objekt für Anzeigen, indem SiecreateAdView()
imSearchAdController
aufrufen. Es wird jeweils nur eine Anzeige präsentiert, aber dieselbenView
können wiederverwendet werden, um im Laufe der Zeit verschiedene Anzeigen auszuliefern.
- Rufen Sie die Methode
loadAds
fürSearchAdController
mit einerSearchAdRequest
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 Konstruktor
SearchAdController
, um Callbacks für verschiedene Status zu registrieren. - Hinweis:
AdListener
-Callbacks werden nicht bei abgebrochenen Anfragen aufgerufen (ein Aufruf vonloadAds
, der durch einen anderenloadAds
-Aufruf vor der Auflösung des ersten Aufrufs vorzeitig beendet wurde).
Implementierungsbeispiel
Das folgende Beispiel zeigt, wie ein SearchAdController
in einer Beispiel-Activity
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 Abfrage initiiert, erstellen Sie eine SearchAdRequest
und rufen Sie loadAds
für das 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, um eine geladene Anzeige in einem Anzeigenaufruf darzustellen.
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 angegebene Suchanfrage bezieht, wird nun im adView
angezeigt.
Fehler untersuchen
Für SearchAdController
ist ein AdListener
-Objekt mit der Methode onAdLoaded()
erforderlich, um Ihre App darüber zu informieren, dass Anzeigen ausgeliefert werden können. Außerdem sollten Sie 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 Callback-Methode onAdFailedToLoad()
verwendet werden, werden im AdListener definiert.