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 AFSMA SDK-Version zu verwenden.

Wenn Sie von 18.1.0 oder früher auf Version 19.0.0 oder höher aktualisieren, lesen Sie bitte den Abschnitt Migrationsanleitung.

Vorbereitung

In diesem Implementierungsleitfaden wird davon ausgegangen, dass Sie mit Folgendem vertraut sind:

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 des 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'
}

Die build.gradle der obersten Ebene muss einen Verweis auf das google()-Repository oder auf maven { url "https://maven.google.com" } enthalten.

Folgen Sie dieser Anleitung. um das eigenständige Versionsabgleich-Plug-in von Google Play in Ihr Projekt einzubinden. Die Anwendung dieses Plug-ins verursacht einen Gradle-Build-Fehler, wenn das AFS Native SDK mit einer inkompatiblen Version der Google Play-Dienste verwendet wird, die App zu erstellen, aber möglicherweise zu Laufzeitabstürzen führen. Oder wenden Sie die Methode failOnVersionConflict() ResolutionStrategy zu Ihrem Projekt hinzufügen, um bei inkompatiblen Versionen von Google Play Dienste werden in Ihrem Projekt verwendet. Speichern Sie die Änderungen und klicken Sie in der Symbolleiste auf Projekt mit Gradle-Dateien synchronisieren.

AndroidX anstelle von Android-Supportbibliotheken verwenden

Ab Version 17.0.0 des SDKs müssen in Ihrer App Jetpack-Bibliotheken (AndroidX) anstelle von Android-Unterstützungsbibliotheken verwendet werden. 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.
  • Aktualisiere deine App zur Verwendung von Jetpack (AndroidX). folgen Sie der Anleitung in Zu AndroidX migrieren

Klassen

Implementieren Sie die folgenden Klassen, um native AFS-Anzeigen in Ihrer App auszuliefern:

SearchAdController

  • Diese Klasse ist für die asynchrone Anforderung von Anzeigen, das Caching und abrufen und rendern.
  • Für jeden Anzeigenkontext ist eine separate SearchAdController erforderlich. Wenn Sie beispielsweise haben einen Bildschirm, auf dem Anzeigen neben einer Liste mit Suchergebnissen angezeigt werden. neben Details zu einem bestimmten Produkt eingeblendet werden, Erstellen Sie zwei separate Instanzen von SearchAdController, eine für jeden Fall.
  • Dem Konstruktor müssen der Code Ihrer Web-Property (Publisher-ID), die Stil-ID, die auf zurückgegebene Anzeigen angewendet werden soll, und SearchAdOptions übergeben werden. Der im Konstruktor angegebene Context muss der Activity sein, der die SearchAdController enthält und auf dem die Anzeige View platziert wird.
  • Rufen Sie loadAds auf, um auf eine neue Nutzersuche hinzuweisen und eine asynchrone Anzeige zu initiieren. Alle Anzeigen, die über vorherige Aufrufe von loadAds geladen wurden, werden beim nächsten Aufruf aus dem internen Anzeigencache gelöscht.
  • Erstellen Sie eine View mit createAdView, um Creatives zu präsentieren.
  • Rufen Sie nach dem Laden der Anzeigen populateAdView mit einer View auf, die zuvor mit createAdView generiert wurde, um eine im Cache gespeicherte Anzeige in dieser View zu rendern. Geben Sie zusätzlich zu View, das ausgefüllt werden soll, einen beliebigen String an, um die Anzeige eindeutig zu identifizieren. Dadurch wird das aus dem Cache zurückgegebene Creative mit dieser adKey verknüpft. Wenn dieselbe adKey an einen zukünftigen Aufruf von populateAdView übergeben wird, wird dieselbe Anzeige zurückgegeben. Wenn populateAdView beispielsweise zum ersten Mal mit adKey="keyA" aufgerufen wird und eine Anzeige für Wanderstiefel gerendert wird, wird bei jedem nachfolgenden Aufruf von populateAdView mit adKey="keyA" dieselbe Anzeige für Wanderstiefel ausgeliefert. Durch einen neuen Aufruf von loadAds werden alle im Cache gespeicherten Anzeigen und zugehörigen Anzeigenschlüssel gelöscht.

SearchAdOptions

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

View

  • Erstellen Sie ein View-Objekt zur Aufnahme von Anzeigen, indem Sie createAdView() im SearchAdController Es wird jeweils höchstens eine Anzeige ausgeliefert. Die gleiche View kann jedoch wiederverwendet werden, um im Laufe der Zeit unterschiedliche Anzeigen zu präsentieren.

SearchAdRequest

  • Rufen Sie die Methode loadAds auf dem SearchAdController mit einem SearchAdRequest auf, um eine asynchrone Anzeigenanfrage zu starten. build() anrufen auf SearchAdRequest.Builder, um ein SearchAdRequest-Objekt zu erstellen.

AdListener

  • Implementieren Sie diese Schnittstelle und übergeben Sie sie an den Konstruktor von SearchAdController, um Callbacks für mehrere Status zu registrieren.
  • Hinweis: AdListener-Callbacks werden nicht für eine abgebrochene Anfrage aufgerufen. Das ist ein Aufruf von loadAds, der durch einen anderen Aufruf von loadAds unterbrochen wurde, bevor der erste Aufruf abgeschlossen wurde.

Beispielimplementierung

Im folgenden Beispiel wird gezeigt, wie eine SearchAdController in einer BeispielActivity 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 Suchanfrage startet, 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 Ihren onAdLoaded-Callback, um eine geladene Anzeige in einem Anzeigen-View einzufügen.

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");
}

In der adView wird jetzt eine Anzeige zu der angegebenen Suchanfrage angezeigt.

Fehler untersuchen

Für SearchAdController ist ein AdListener-Objekt mit dem onAdLoaded() erforderlich um Ihre App darüber zu informieren, dass Anzeigen ausgeliefert werden können. Außerdem sollten Sie Implementieren Sie die Methode onAdFailedToLoad(), damit Sie Fehler erkennen und korrigieren können. Sie können beispielsweise die folgende AdListener zum Debuggen Ihrer Implementierung verwenden:

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, sind im AdListener definiert.