Implementacja reklam natywnych AdSense dla wyszukiwania na Androida

Pakiet SDK do reklam mobilnych Google obsługuje też niestandardowe style reklamy w wyszukiwarce. Jeśli Twoja aplikacja korzysta już z pakietu SDK do reklam mobilnych Google, zalecamy skorzystanie z Wersja pakietu SDK AdSense dla wyszukiwania .

W przypadku aktualizacji z wersji 18.1.0 lub nowszej do wersji 19.0.0 lub nowszej, zapoznaj się z artykułem naszym przewodniku po migracji.

Wymagania wstępne

W tym przewodniku po implementacji zakładamy, że znasz te zagadnienia:

Importowanie natywnego pakietu SDK AdSense dla wyszukiwania

Dodaj pakiet SDK

Aby dodać do aplikacji natywny pakiet SDK AdSense dla wyszukiwania, wykonaj te czynności:

Otwórz plik build.gradle w katalogu modułu aplikacji. W sekcji dependencies dodaj nową regułę kompilacji dla najnowszej wersji pakietu SDK:

dependencies {
  implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}

Upewnij się, że obiekt build.gradle najwyższego poziomu zawiera odniesienie do elementu google() do repozytorium lub do maven { url "https://maven.google.com" }.

Wykonaj te instrukcje. , by dołączyć do projektu wtyczkę Google Play Standalone Version Matcher. Zastosowanie tej wtyczki powoduje błąd kompilacji Gradle, gdy natywny pakiet SDK AdSense dla wyszukiwania jest używane z niezgodną wersją Usług Google Play, zamiast zezwalać na do tworzenia aplikacji, ale mogą też powodować awarie w czasie działania. Możesz też zastosować failOnVersionConflict() ResolutionStrategy do projektu, co spowoduje błąd kompilacji w przypadku niezgodnych wersji Google Play. Usługi są używane w Twoim projekcie. Zapisz zmiany i kliknij Synchronizuj projekt z plikami Gradle w na pasku narzędzi.

Używaj AndroidaX zamiast bibliotek pomocy Androida

Począwszy od wersji 17.0.0 pakietu SDK, aplikacja musi korzystać z Jetpack (Android X) bibliotekach zamiast bibliotek pomocy Androida. Wymagania dotyczące zgodności:

  • Ustaw com.android.tools.build:gradle na wersję 3.2.1 lub nowszą.
  • Ustaw compileSdkVersion na 28 lub więcej
  • zaktualizować aplikację, aby używać Jetpack (AndroidX); wykonaj instrukcje podane w Migracja na AndroidaX

Zajęcia

Aby wyświetlać w aplikacji reklamy natywne AdSense dla wyszukiwania, zaimplementuj te klasy:

SearchAdController

  • Ta klasa odpowiada za asynchroniczne żądania reklam, buforowanie i pobieranie i renderowanie reklam.
  • Każdy kontekst reklamy wymaga osobnego pola SearchAdController; na przykład, jeśli Mieć ekran, na którym reklamy są wyświetlane obok listy wyników wyszukiwania, na którym wyświetlane są reklamy obok informacji o konkretnym produkcie, utworzy 2 osobne instancje SearchAdController, po 1 dla każdego przypadku.
  • Konstruktor wymaga podania kodu usługi internetowej (identyfikatora wydawcy), identyfikator stylu, do którego ma zostać zastosowany zwrócone reklamy, a SearchAdOptions. Obiekt Context udostępniony w konstruktorze musi być polem Activity zawierającym SearchAdController i miejscem wyświetli reklamę View.
  • Wywołaj loadAds, aby wskazać nowe wyszukiwanie użytkownika i zainicjować reklamę asynchroniczną użytkownika. Wszystkie reklamy wczytane w ramach poprzednich wywołań do loadAds są usuwane z wewnętrznej pamięci podręcznej reklam po wysłaniu nowego wywołania.
  • Aby wyświetlać kreacje, utwórz View z parametrem createAdView.
  • Po załadowaniu reklam wywołaj funkcję populateAdView za pomocą wcześniej wygenerowanego View za pomocą createAdView, by wyrenderować reklamę z pamięci podręcznej w tym elemencie: View. Oprócz View, który ma zostać wypełniony, podaj adKey, dowolny ciąg znaków do jednoznacznie identyfikują reklamę. Przypisuje do filmu konkretną reklamę zwracaną z pamięci podręcznej z tym elementem adKey, więc gdy ta sama wartość adKey zostanie przekazana do przyszłego wywołania do populateAdView, zostanie zwrócona ta sama reklama. Na przykład, jeśli Funkcja populateAdView jest wywoływana po raz pierwszy za pomocą metody adKey="keyA" i renderuje parametr reklama butów trekkingowych. Przy każdym kolejnym połączeniu do strony populateAdView adKey="keyA" wyświetli tę samą reklamę butów trekkingowych. (Nawiązuję nowe połączenie z loadAds usuwa wszystkie reklamy z pamięci podręcznej i powiązane z nimi klucze reklam).

SearchAdOptions

  • Przekaż ten obiekt do konstruktora SearchAdController, aby dostosować sposób działania reklam są żądane i wyświetlane. Zadzwoń do firmy build() pod numer SearchAdOptions.Builder, aby i utwórz obiekt SearchAdOptions.

View

  • Utwórz obiekt View do wstrzymywania reklam, wywołując metodę createAdView() w SearchAdController Wyświetla maksymalnie 1 reklamę naraz, ale ta sama wartość View może poddawane recyklingowi, aby z czasem wyświetlać inne reklamy.

SearchAdRequest

  • Wywołaj metodę loadAds w: SearchAdController za pomocą SearchAdRequest aby zainicjować asynchroniczne żądanie reklamy. Zadzwoń do użytkownika build() pod numer SearchAdRequest.Builder, aby utworzyć obiekt SearchAdRequest.

AdListener

  • Wdróż ten interfejs i przekaż go do konstruktora SearchAdController do rejestrowania wywołań zwrotnych dla kilku stanów.
  • Uwaga: połączenie zwrotne z numerem AdListener nie zostanie nawiązane w przypadku anulowanego żądania (połączenia) do loadAds, które zostało wywłaszczone przez inne wywołanie do loadAds przed pierwszym połączenie zakończone).

Przykładowa implementacja

Poniższy przykład pokazuje, jak utworzyć SearchAdController w próbce. 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);
}

Gdy użytkownik inicjuje zapytanie, utwórz SearchAdRequest i wywołaj funkcję loadAds w ciągu znaków SearchAdController, aby uruchomić asynchroniczne żądanie reklamy.

// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());

Zaimplementuj wywołanie zwrotne onAdLoaded, aby wczytać wczytaną reklamę w jej widoku.

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

Reklama związana z danym zapytaniem pojawi się teraz w adView.

Badanie błędów

SearchAdController wymaga obiektu AdListener z onAdLoaded() to metoda powiadomienia aplikacji, że reklamy są gotowe do wyświetlenia. Wykonaj też zaimplementuj metodę onAdFailedToLoad(), aby móc wykrywać i korygować błędy. Możesz na przykład użyć tego elementu AdListener, aby debugować implementacja:

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

Stałe używane w metodzie wywołania zwrotnego onAdFailedToLoad() są zdefiniowane w elemencie AdListener.