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 .

Jeśli przechodzisz z wersji 18.1.0 lub starszej na wersję 19.0.0 lub nowszą, zapoznaj się z przewodnikiem po migracji.

Wymagania wstępne

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

  • Reklamy AdSense w wyszukiwarce niestandardowej z niestandardowymi stylami reklam w wyszukiwarce
  • Tworzenie aplikacji na Androida

Importowanie natywnego pakietu SDK AFS

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ę do dopasowywania wersji samodzielnej Google Play. Zastosowanie tego wtyczka powoduje błąd kompilacji Gradle, gdy pakiet AFS Native SDK jest używany z niezgodną wersją Usług Google Play, zamiast umożliwić kompilację aplikacji, ale potencjalnie powoduje 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 na pasku narzędzi kliknij Synchronizuj projekt z plikami Gradle.

Używanie AndroidX zamiast bibliotek pomocy Androida

Od wersji 17.0.0 pakietu SDK aplikacja musi używać bibliotek Jetpack (AndroidX) zamiast bibliotek Android Support Library. Wymagania dotyczące zgodności:

  • Ustaw com.android.tools.build:gradle na wersję 3.2.1 lub nowszą.
  • Ustaw wartość compileSdkVersion na 28 lub wyższą.
  • Zaktualizuj aplikację, aby używała Jetpacka (AndroidX). W tym celu postępuj zgodnie z instrukcjami podanymi w artykule Przejście na AndroidX.

Zajęcia

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

SearchAdController

  • Ta klasa odpowiada za asynchroniczne żądanie reklam, ich buforowanie i pobieranie oraz renderowanie.
  • 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łanie loadAds wskazuje, że nowy użytkownik rozpoczął wyszukiwanie, i inicjuje asynchroniczne żądanie reklamy. Wszystkie reklamy załadowane z poprzednich wywołań funkcji loadAds są usuwane z wewnętrznego pamięci podręcznej reklam po wywołaniu nowej funkcji.
  • Utwórz View z użyciem createAdView, aby wyświetlać kreacje reklamowe.
  • Gdy reklamy zostaną wczytane, wywołaj funkcję populateAdView z użyciem View wygenerowanego wcześniej za pomocą funkcji createAdView, aby wyrenderować reklamę z pamięci podręcznej w tym View. Oprócz pola View, które należy wypełnić, podaj ciąg znaków adKey, który jednoznacznie identyfikuje reklamę. Dzięki temu określona kreacja reklamy zwrócona z pamięci podręcznej zostanie powiązana z tym adKey, więc gdy ten sam adKey zostanie przekazany do przyszłego wywołania funkcji populateAdView, zwrócona zostanie 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 wyświetlania i wyświetlania reklam. 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

  • Aby zainicjować asynchroniczne żądanie reklamy, wywołaj metodę loadAds w obiekcie SearchAdController z argumentem SearchAdRequest. Wywołaj funkcję build() w obiekcie 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: funkcje AdListener nie będą wywoływane w przypadku anulowanych żądań (wywołań do loadAds, które zostały zastąpione przez inne wywołanie do loadAds przed rozwiązaniem pierwszego wywołania).

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 powiązana z danym zapytaniem będzie teraz wyświetlana 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 klasie AdListener.