Native AFS-Implementierung für Android

Das Google Mobile Ads SDK unterstützt auch benutzerdefinierte Designs. Wenn Ihre App Google Mobile Ads SDK bereits verwendet wird, sollten Sie das SDK Version des AFSMA SDK .

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

Achte darauf, dass deine build.gradle auf oberster Ebene einen Verweis auf die google() enthält Repository oder auf maven { url "https://maven.google.com" }.

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 entwickeln, 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 auf Sync Project with Gradle Files (Projekt mit Gradle-Dateien synchronisieren). in der Symbolleiste.

AndroidX anstelle von Android-Supportbibliotheken verwenden

Ab Version 17.0.0 des SDKs muss deine App Jetpack (AndroidX) verwenden Bibliotheken anstelle von Android Support Libraries. 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 muss Ihr Web-Property-Code (Publisher-ID) übergeben werden, Stil-ID, auf die angewendet werden soll Anzeigen zurückgegeben und SearchAdOptions. Die im Konstruktor angegebene Context muss die Activity sein, die die SearchAdController enthält, und in der Sie wird die Anzeige View platziert.
  • Rufen Sie loadAds auf, um auf eine neue Nutzersuche hinzuweisen und eine asynchrone Anzeige zu initiieren. Alle Anzeigen, die bei früheren Aufrufen von loadAds geladen wurden, werden aus folgendem Zeitraum gelöscht: internen Anzeigen-Cache geladen, wenn ein neuer Aufruf erfolgt.
  • Erstellen Sie eine View mit createAdView, um Anzeigen-Creatives zu präsentieren.
  • Nachdem die Anzeigen geladen wurden, rufen Sie populateAdView mit einer zuvor generierten View auf mit createAdView, um eine im Cache gespeicherte Anzeige in dieser View zu rendern. Zusätzlich zu den View, das ausgefüllt werden soll, geben Sie einen adKey an, einen beliebigen String, die Anzeige eindeutig identifiziert. Dadurch wird das spezifische Anzeigen-Creative verknüpft, das von dem Cache mit dieser adKey, sodass bei der Übergabe derselben adKey an einen zukünftigen Aufruf an populateAdView, wird dieselbe Anzeige zurückgegeben. Wenn beispielsweise populateAdView wird zum ersten Mal mit adKey="keyA" aufgerufen und rendert eine Anzeige für Wanderstiefel. Bei jedem nachfolgenden Aufruf von populateAdView mit adKey="keyA" füllt dieselbe Anzeige für Wanderstiefel aus. (Ruft die loadAds löscht alle im Cache gespeicherten Anzeigen und die zugehörigen Anzeigenschlüssel.

SearchAdOptions

  • Übergeben Sie dieses Objekt an den SearchAdController-Konstruktor, um die Anzeigenausrichtung anzupassen angefordert und angezeigt werden. build() auf SearchAdOptions.Builder anrufen, um Erstellen Sie ein SearchAdOptions-Objekt.

View

  • Erstellen Sie ein View-Objekt zur Aufnahme von Anzeigen, indem Sie createAdView() im SearchAdController Es wird maximal eine Anzeige gleichzeitig eingeblendet, aber derselbe View kann wiederverwendet werden können, um im Laufe der Zeit unterschiedliche Anzeigen zu präsentieren.

SearchAdRequest

  • Rufen Sie die Methode loadAds für den SearchAdController mit einem SearchAdRequest auf. zum Initiieren einer asynchronen Anzeigenanfrage. build() anrufen auf SearchAdRequest.Builder zum Erstellen eines SearchAdRequest-Objekts.

AdListener

  • Diese Schnittstelle implementieren und an den SearchAdController-Konstruktor übergeben zum Registrieren von Callbacks für mehrere Zustände.
  • Hinweis: AdListener-Callbacks werden bei abgebrochenen Anfragen (Aufrufen) nicht aufgerufen. an loadAds, der durch einen anderen Aufruf von loadAds vor dem ersten Anruf gelöst).

Beispielimplementierung

Im folgenden Beispiel wird gezeigt, wie eine SearchAdController in einem Beispiel erstellt wird. Activity.

//  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, eine SearchAdRequest erstellen und loadAds aufrufen auf SearchAdController, 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 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. Beispielsweise können Sie den folgenden AdListener verwenden, um Fehler an Ihrem Implementierung:

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

In der Callback-Methode onAdFailedToLoad() verwendete Konstanten werden im AdListener definiert.