Native AFS-Implementierung für Android

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:

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:

SearchAdController

  • 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 von SearchAdController 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 angegebene Context muss das Activity-Element sein, das die SearchAdController enthält und wo die Anzeige View platziert wird.
  • Rufen Sie loadAds auf, um eine neue Nutzersuche anzugeben und eine asynchrone Anzeigenanfrage zu initiieren. Alle Anzeigen, die aus vorherigen Aufrufen von loadAds geladen wurden, werden bei einem neuen Aufruf aus dem internen Anzeigen-Cache gelöscht.
  • Erstellen Sie eine View mit createAdView, um Anzeigen-Creatives zu präsentieren.
  • Sobald die Anzeigen geladen sind, rufen Sie populateAdView mit einem View auf, das zuvor mit createAdView generiert wurde, um eine im Cache gespeicherte Anzeige in dieser View zu rendern. Geben Sie zusätzlich zu dem auszufüllenden View einen adKey an. Dies ist ein beliebiger String zur eindeutigen Identifizierung der Anzeige. Dadurch wird die aus dem Cache zurückgegebene Anzeige mit dieser adKey verknüpft. Wenn dieselbe adKey an einen zukünftigen Aufruf von populateAdView übergeben wird, wird dieselbe Anzeige zurückgegeben. Wenn beispielsweise populateAdView zum ersten Mal mit adKey="keyA" aufgerufen und eine Anzeige für Wanderstiefel gerendert wird, wird bei jedem nachfolgenden Aufruf von populateAdView mit adKey="keyA" dieselbe Anzeige für Wanderstiefel präsentiert. Durch einen neuen Aufruf von loadAds werden alle im Cache gespeicherten Anzeigen und die zugehörigen Anzeigenschlüssel gelöscht.

SearchAdOptions

  • Übergeben Sie dieses Objekt an den Konstruktor SearchAdController, um anzupassen, wie Anzeigen angefordert und dargestellt werden. Rufen Sie build() für ein SearchAdOptions.Builder auf, um ein SearchAdOptions-Objekt zu erstellen.

View

  • Erstellen Sie ein View-Objekt für Anzeigen, indem Sie createAdView() im SearchAdController aufrufen. Es wird jeweils nur eine Anzeige präsentiert, aber dieselben View können wiederverwendet werden, um im Laufe der Zeit verschiedene Anzeigen auszuliefern.

SearchAdRequest

  • Rufen Sie die Methode loadAds für SearchAdController mit einer SearchAdRequest auf, um eine asynchrone Anzeigenanfrage zu initiieren. Rufen Sie build() für ein SearchAdRequest.Builder auf, um ein SearchAdRequest-Objekt zu erstellen.

AdListener

  • 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 von loadAds, der durch einen anderen loadAds-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.