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:
- Reklamy AdSense w wyszukiwarce niestandardowej z niestandardowymi stylami reklamy w wyszukiwarce
- Tworzenie aplikacji na Androida
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ę do dopasowywania wersji samodzielnej Google Play.
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:
- 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 instancjeSearchAdController
, 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
. ObiektContext
udostępniony w konstruktorze musi być polemActivity
zawierającymSearchAdController
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ń doloadAds
są usuwane z wewnętrznej pamięci podręcznej reklam po wysłaniu nowego wywołania. - Aby wyświetlać kreacje, utwórz
View
z parametremcreateAdView
. - Po załadowaniu reklam wywołaj funkcję
populateAdView
za pomocą wcześniej wygenerowanegoView
za pomocącreateAdView
, by wyrenderować reklamę z pamięci podręcznej w tym elemencie:View
. OpróczView
, który ma zostać wypełniony, podajadKey
, dowolny ciąg znaków do jednoznacznie identyfikują reklamę. Przypisuje do filmu konkretną reklamę zwracaną z pamięci podręcznej z tym elementemadKey
, więc gdy ta sama wartośćadKey
zostanie przekazana do przyszłego wywołania dopopulateAdView
, zostanie zwrócona ta sama reklama. Na przykład, jeśli FunkcjapopulateAdView
jest wywoływana po raz pierwszy za pomocą metodyadKey="keyA"
i renderuje parametr reklama butów trekkingowych. Przy każdym kolejnym połączeniu do stronypopulateAdView
adKey="keyA"
wyświetli tę samą reklamę butów trekkingowych. (Nawiązuję nowe połączenie zloadAds
usuwa wszystkie reklamy z pamięci podręcznej i powiązane z nimi klucze reklam).
- Przekaż ten obiekt do konstruktora
SearchAdController
, aby dostosować sposób działania reklam są żądane i wyświetlane. Zadzwoń do firmybuild()
pod numerSearchAdOptions.Builder
, aby i utwórz obiektSearchAdOptions
.
View
- Utwórz obiekt
View
do wstrzymywania reklam, wywołując metodęcreateAdView()
wSearchAdController
Wyświetla maksymalnie 1 reklamę naraz, ale ta sama wartośćView
może poddawane recyklingowi, aby z czasem wyświetlać inne reklamy.
- Wywołaj metodę
loadAds
w:SearchAdController
za pomocąSearchAdRequest
aby zainicjować asynchroniczne żądanie reklamy. Zadzwoń do użytkownikabuild()
pod numerSearchAdRequest.Builder
, aby utworzyć obiektSearchAdRequest
.
- 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) doloadAds
, które zostało wywłaszczone przez inne wywołanie doloadAds
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.