Z tego przewodnika dowiesz się, jak wczytać zakotwiczony baner adaptacyjny do aplikacji na Androida.
Wymagania wstępne
- Skonfiguruj Google Mobile Ads SDK.
- Opcjonalnie: aby zobaczyć przykład implementacji banerów reklamowych, wybierz jedną z tych aplikacji przykładowych:
- Przykład zakotwiczonych banerów adaptacyjnych w języku Java, Kotlin, lub Jetpack Compose.
- Prezentacja funkcji zaawansowanych w języku Java lub Kotlin.
Zawsze testuj reklamy testowe
Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie reklam rzeczywistych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.
Najłatwiej jest wczytać reklamy testowe, używając naszego specjalnego identyfikatora jednostki reklamowej na banery na Androida:
/21775744923/example/adaptive-banner
Jest on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w odpowiedzi na każde żądanie. Możesz go używać w swoich aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.
Więcej informacji o tym, jak działają reklamy testowe Google Mobile Ads SDK, znajdziesz w artykule Włączanie reklam testowych.
Określanie wyświetlenia reklamy
Układ XML
Dodaj widok do pliku XML układu, który będzie służyć jako kontener zakotwiczonego banera adaptacyjnego:
<!-- Ad view container that fills the width of the screen and adjusts its
height to the content of the ad. -->
<FrameLayout
android:id="@+id/ad_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true" />
Jetpack Compose
Dołącz folder JetpackCompose Utilities. Ten folder zawiera pomocnicze funkcje do tworzenia obiektu
AdViewi komponentów.Utwórz
AdView:
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
Ustawianie rozmiaru reklamy
Duże banery adaptacyjne to większy format przeznaczony do układów bez przewijania. W porównaniu ze standardowymi zakotwiczonymi banerami adaptacyjnymi te banery mogą mieć większą maksymalną wysokość – do 20% wysokości ekranu i od 50 do 150 dp. Ta dodatkowa przestrzeń jest zoptymalizowana pod kątem treści wideo.
Ustaw AdSize na an
zakotwiczonego banera adaptacyjnego o określonej szerokości:
Java
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
Kotlin
// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))
Jetpack Compose
// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
Dodawanie AdManagerAdView do układu
Utwórz AdManagerAdView o rozmiarze reklamy, który chcesz dodać do
układu aplikacji:
Java
// Create a new ad view.
adView = new AdManagerAdView(this);
adView.setAdUnitId(AD_UNIT);
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);
Kotlin
// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))
this.adView = adView
// Replace ad container with new ad view.
binding.adViewContainer.removeAllViews()
binding.adViewContainer.addView(adView)
Jetpack Compose
val adView = remember { AdManagerAdView(context) }
// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = ADMANAGER_ADAPTIVE_BANNER_AD_UNIT_ID
// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
Wczytywanie reklamy
Ten przykład wczytuje zakotwiczony baner adaptacyjny o szerokości 360 do obiektu AdManagerAdView:
Java
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
Kotlin
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
Odświeżanie reklamy
Jeśli jednostka reklamowa jest skonfigurowana do odświeżania, nie musisz wysyłać kolejnego żądania reklamy, gdy nie uda się jej wczytać. Google Mobile Ads SDK uwzględnia częstotliwość odświeżania określoną w interfejsie Ad Managera. Jeśli odświeżanie nie jest włączone, wyślij nowe żądanie. Więcej informacji o odświeżaniu jednostek reklamowych, np. o ustawianiu częstotliwości odświeżania, znajdziesz w artykule Częstotliwość odświeżania reklam w aplikacjach mobilnych.
Zwalnianie zasobów reklamy
Gdy skończysz korzystać z banera reklamowego, możesz zwolnić jego zasoby.
Aby zwolnić zasoby reklamy, usuń ją z hierarchii widoków i wszystkie odwołania do niej:
Java
public void destroyBanner() {
// Remove banner from view hierarchy.
if (adView != null) {
View parentView = (View) adView.getParent();
if (parentView instanceof ViewGroup) {
((ViewGroup) parentView).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
}
// Drop reference to the banner ad.
adView = null;
}
Kotlin
fun destroyBanner() {
// Remove banner from view hierarchy.
val parentView = adView?.parent
if (parentView is ViewGroup) {
parentView.removeView(adView)
}
// Destroy the banner ad resources.
adView?.destroy()
// Drop reference to the banner ad.
adView = null
}
Zdarzenia reklamowe
Możesz nasłuchiwać różnych zdarzeń w cyklu życia reklamy, w tym zdarzeń związanych z wczytywaniem, wyświetleniem i kliknięciem reklamy oraz jej otwarciem i zamknięciem. Zalecamy ustawienie wywołania zwrotnego przed wczytaniem banera.
Java
if (adView != null) {
adView.setAdListener(
new AdListener() {
@Override
public void onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
@Override
public void onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
// Code to be executed when an ad request fails.
}
@Override
public void onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
@Override
public void onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
});
}
Kotlin
adView?.adListener =
object : AdListener() {
override fun onAdClicked() {
// Code to be executed when the user clicks on an ad.
}
override fun onAdClosed() {
// Code to be executed when the user is about to return
// to the app after tapping on an ad.
}
override fun onAdFailedToLoad(adError: LoadAdError) {
// Code to be executed when an ad request fails.
}
override fun onAdImpression() {
// Code to be executed when an impression is recorded
// for an ad.
}
override fun onAdLoaded() {
// Code to be executed when an ad finishes loading.
}
override fun onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
}
}
Każda z metod, które można zastąpić w AdListener
odpowiada zdarzeniu w cyklu życia reklamy.
| Metody, które można zastąpić | |
|---|---|
onAdClicked() |
Metoda onAdClicked()
jest wywoływana, gdy zostanie zarejestrowane kliknięcie reklamy.
|
onAdClosed() |
Metoda onAdClosed()
jest wywoływana, gdy użytkownik wraca do aplikacji po wyświetleniu docelowego adresu URL reklamy. Aplikacja może jej użyć do wznowienia zawieszonych działań lub
wykonania innych czynności niezbędnych do przygotowania się na interakcję.
|
onAdFailedToLoad() |
Metoda onAdFailedToLoad()
jest jedyną, która zawiera parametr. Parametr error typu
LoadAdError opisuje, jaki błąd wystąpił. Więcej informacji znajdziesz w dokumentacji Debugowanie błędów wczytywania reklam.
|
onAdImpression() |
Metoda onAdImpression()
jest wywoływana, gdy zostanie zarejestrowane wyświetlenie reklamy.
|
onAdLoaded() |
Metoda onAdLoaded()
jest wykonywana, gdy reklama zostanie wczytana. Jeśli chcesz opóźnić
dodanie AdManagerAdView
do aktywności lub fragmentu, dopóki nie będziesz mieć pewności, że reklama zostanie wczytana, możesz to zrobić tutaj.
|
onAdOpened() |
Metoda onAdOpened()
jest wywoływana, gdy reklama otwiera nakładkę, która zasłania ekran.
|
Akceleracja sprzętowa w przypadku reklam wideo
Aby reklamy wideo wyświetlały się prawidłowo w widokach banerów reklamowych, akceleracja sprzętowa musi być włączona.
Akceleracja sprzętowa jest domyślnie włączona, ale niektóre aplikacje mogą ją wyłączyć. Jeśli dotyczy to Twojej aplikacji, zalecamy włączenie akceleracji sprzętowej w przypadku klas Activity, które używają reklam.
Włączanie akceleracji sprzętowej
Jeśli aplikacja nie działa prawidłowo po włączeniu akceleracji sprzętowej w skali globalnej, możesz ją kontrolować także w przypadku poszczególnych aktywności. Aby włączyć lub
wyłączyć akcelerację sprzętową, możesz użyć android:hardwareAccelerated
atrybutu dla
<application>
i
<activity>
elementów w pliku AndroidManifest.xml. Ten przykład włącza akcelerację sprzętową w całej aplikacji, ale wyłącza ją w przypadku jednej aktywności:
<application android:hardwareAccelerated="true">
<!-- For activities that use ads, hardwareAcceleration should be true. -->
<activity android:hardwareAccelerated="true" />
<!-- For activities that don't use ads, hardwareAcceleration can be false. -->
<activity android:hardwareAccelerated="false" />
</application>
Więcej informacji o opcjach sterowania akceleracją sprzętową znajdziesz w przewodniku Akceleracja sprzętowa. Pamiętaj, że w przypadku wyłączenia akceleracji sprzętowej w aktywności nie można jej włączyć w poszczególnych widokach reklam. Akceleracja sprzętowa musi być włączona w samej aktywności.
Ręczne zliczanie wyświetleń
Ręczne zliczanie wyświetleń jest zgodne tylko z kampaniami sprzedawanymi bezpośrednio i kampaniami własnymi z kreacjami trafikowanymi bezpośrednio w usłudze Ad Manager. Nie należy go używać w przypadku reklam z wypełnienia ani reklam z sieci zewnętrznych. Więcej informacji znajdziesz w artykule Zliczanie wyświetleń i kliknięć.
Jeśli masz specjalne warunki dotyczące tego, kiedy należy zarejestrować wyświetlenie, możesz ręcznie wysyłać pingi wyświetleń do Ad Managera:
Java
if (adManagerAdView != null) {
adManagerAdView.setManualImpressionsEnabled(true);
}
Kotlin
adManagerAdView?.setManualImpressionsEnabled(true)
Gdy stwierdzisz, że reklama została prawidłowo zwrócona i jest widoczna na ekranie, możesz ręcznie zarejestrować wyświetlenie:
Java
if (adManagerAdView != null) {
adManagerAdView.recordManualImpression();
}
Kotlin
adManagerAdView?.recordManualImpression()
Zdarzenia w aplikacji
Zdarzenia w aplikacji pozwalają tworzyć reklamy, które mogą wysyłać wiadomości do kodu aplikacji. Aplikacja może następnie podejmować działania na podstawie tych wiadomości.
Możesz nasłuchiwać zdarzeń w aplikacji specyficznych dla Ad Managera za pomocą
AppEventListener.
Te zdarzenia mogą wystąpić w dowolnym momencie cyklu życia reklamy, nawet przed wywołaniem onAdLoaded().
Ustaw AppEventListener w AdManagerAdView:
Java
if (adManagerAdView != null) {
adManagerAdView.setAppEventListener(this);
}
Kotlin
adManagerAdView?.appEventListener = this
Oto przykład pokazujący, jak zmienić kolor tła aplikacji w zależności od zdarzenia w aplikacji o nazwie color:
Java
@Override
public void onAppEvent(@NonNull String name, @NonNull String info) {
if (name.equals("color")) {
switch (info) {
case "green":
// Set background color to green.
break;
case "blue":
// Set background color to blue.
break;
default:
// Set background color to black.
break;
}
}
}
Kotlin
override fun onAppEvent(name: String, info: String) {
if (name == "color") {
when (info) {
"green" -> {
// Set background color to green.
}
"blue" -> {
// Set background color to blue.
}
else -> {
// Set background color to black.
}
}
}
}
A oto odpowiednia kreacja, która wysyła do odbiorcy wiadomości o zdarzeniach w aplikacji:
<html>
<head>
<script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Send a color=green event when ad loads.
admob.events.dispatchAppEvent("color", "green");
document.getElementById("ad").addEventListener("click", function() {
// Send a color=blue event when ad is clicked.
admob.events.dispatchAppEvent("color", "blue");
});
});
</script>
<style>
#ad {
width: 320px;
height: 50px;
top: 0px;
left: 0px;
font-size: 24pt;
font-weight: bold;
position: absolute;
background: black;
color: white;
text-align: center;
}
</style>
</head>
<body>
<div id="ad">Carpe diem!</div>
</body>
</html>
Implementację zdarzeń w aplikacji w aplikacji w wersji demonstracyjnej API znajdziesz w przykładzie zdarzeń w aplikacji Ad Managera.
Dalsze kroki
Banery zwijane
Zwijane banery reklamowe to banery, które początkowo wyświetlają się jako większa nakładka z przyciskiem umożliwiającym zwinięcie reklamy do mniejszego rozmiaru. Możesz ich użyć do dalszej optymalizacji skuteczności. Więcej informacji znajdziesz w artykule Banery zwijane.
Wbudowane banery adaptacyjne
Wbudowane banery adaptacyjne są większe i wyższe niż zakotwiczone banery adaptacyjne. Mają zmienną wysokość i mogą zajmować całą wysokość ekranu urządzenia. W przypadku aplikacji, które umieszczają banery reklamowe w treściach, które można przewijać, zalecamy używanie wbudowanych banerów adaptacyjnych zamiast zakotwiczonych banerów adaptacyjnych. Więcej informacji znajdziesz w artykule Wbudowane banery adaptacyjne