Konfigurowanie banerów reklamowych

Banery reklamowe to prostokątne reklamy, które zajmują część układu aplikacji. Zakotwiczone banery adaptacyjne to reklamy o stałym formacie obrazu, które pozostają na ekranie, gdy użytkownicy wchodzą w interakcję z aplikacją – są zakotwiczone u góry lub u dołu ekranu.

W tym przewodniku opisujemy, jak wczytać zakotwiczony adaptacyjny baner reklamowy w aplikacji na Androida.

Wymagania wstępne

Zawsze przeprowadzaj testy z użyciem reklam testowych

Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie aktywnych reklam produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie naszego dedykowanego identyfikatora testowej jednostki reklamowej dla banerów na Androida:

ca-app-pub-3940256099942544/9214589741

Został on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, 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 (Legacy), znajdziesz w artykule Włączanie reklam testowych.

Definiowanie widoku reklamy

Układ XML

Dodaj do pliku XML układu widok, który będzie służył jako kontener zakotwiczonego banera reklamowego:

<!-- 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

  1. Uwzględnij folder JetpackCompose Utilities. Ten folder zawiera obiekty pomocnicze do tworzenia obiektu AdView i komponentów.

  2. Utwórz AdView:


// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { BannerAd(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 większa przestrzeń jest zoptymalizowana pod kątem treści wideo.

Ustaw AdSize na zakotwiczony baner adaptacyjny o określonej szerokości:

Java


// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(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)

Ustaw rozmiar reklamy mniejszy niż rozmiar ekranu urządzenia lub mu równy. Aby określić maksymalny rozmiar ekranu, użyj metody Resources.getDisplayMetrics. Wymiary obiektu AdSize są wyrażone w pikselach niezależnych od gęstości (dp). Podczas porównywania przekonwertuj rozmiar ekranu z pikseli na dp. Szczegółowe informacje o ograniczeniach rozmiaru znajdziesz w artykule Wymagania dotyczące rozmiaru żądania reklamy.

Dodaj AdView do układu

Utwórz obiekt AdView, używając rozmiaru reklamy, który chcesz dodać do układu aplikacji:

Java


// Create a new ad view.
adView = new AdView(this);
adView.setAdUnitId(AD_UNIT_ID);
// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360));

// Replace ad container with new ad view.
adContainerView.removeAllViews();
adContainerView.addView(adView);

Kotlin


// Create a new ad view.
val adView = AdView(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 { AdView(context) }

// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = 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()) { BannerAd(adView, modifier) }
}

Wczytywanie reklamy

Poniższy przykład wczytuje zakotwiczony baner adaptacyjny o szerokości 360 do obiektu AdView:

Java

AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);

Kotlin

val adRequest = AdRequest.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 (Legacy) uwzględnia częstotliwość odświeżania określoną w interfejsie AdMob. Jeśli nie masz włączonego odświeżania, wyślij nową prośbę. Więcej informacji o odświeżaniu jednostek reklamowych, np. o ustawianiu częstotliwości odświeżania, znajdziesz w artykule Używanie opcji automatycznego odświeżania w przypadku banerów reklamowych.

Zwalnianie zasobu reklamowego

Gdy skończysz korzystać z banera reklamowego, możesz zwolnić jego zasoby.

Aby zwolnić zasób reklamy, usuń reklamę 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
}

Jetpack Compose

DisposableEffect(Unit) {
  // Destroy the AdView to prevent memory leaks when the screen is disposed.
  onDispose { adView.destroy() }
}

Zdarzenia reklamowe

Możesz nasłuchiwać wielu zdarzeń w cyklu życia reklamy, m.in. wczytywania, wyświetlenia reklamy i kliknięcia, a także otwarcia i zamknięcia. 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 klasie 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 użyć tej metody, aby wznowić zawieszone działania lub wykonać inne czynności niezbędne do przygotowania się do interakcji. Więcej informacji o implementacji metod detektora reklam w aplikacji demonstracyjnej interfejsu Android API znajdziesz w przykładzie detektora reklam AdMob.
onAdFailedToLoad() Metoda onAdFailedToLoad() jest jedyną, która zawiera parametr. Parametr błędu typu LoadAdError opisuje, jaki błąd wystąpił. Więcej informacji znajdziesz w dokumentacji dotyczącej debugowania błędów wczytywania reklam.
onAdImpression() Metoda onAdImpression() jest wywoływana, gdy zostanie zarejestrowane wyświetlenie reklamy.
onAdLoaded() Metoda onAdLoaded() jest wykonywana po zakończeniu wczytywania reklamy. Jeśli chcesz opóźnić dodanie AdView 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 zakrywa ekran.

Akceleracja sprzętowa w przypadku reklam wideo

Aby reklamy wideo wyświetlały się prawidłowo w widokach banerów reklamowych, musisz włączyć akcelerację sprzętową.

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 klasach Activity, które używają reklam.

Włączanie akceleracji sprzętowej

Jeśli aplikacja nie działa prawidłowo z włączoną globalnie akceleracją sprzętową, możesz ją kontrolować również w przypadku poszczególnych działań. Aby włączyć lub wyłączyć akcelerację sprzętową, możesz użyć atrybutu android:hardwareAccelerated dla elementów <application> i <activity> w pliku AndroidManifest.xml. W tym przykładzie akceleracja sprzętowa jest włączona w całej aplikacji, ale wyłączona w 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 kontrolowania akceleracji sprzętowej znajdziesz w przewodniku po akceleracji sprzętowej. Pamiętaj, że nie można włączyć akceleracji sprzętowej w przypadku wyświetleń pojedynczych reklam, jeśli aktywność jest wyłączona, więc aktywność musi mieć włączoną akcelerację sprzętową.

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 zmniejszenie reklamy. Rozważ użycie go, aby jeszcze bardziej zoptymalizować skuteczność. Więcej informacji znajdziesz w artykule Zwijane banery reklamowe.

Wbudowane banery adaptacyjne

Wbudowane banery adaptacyjne są większe i wyższe niż zakotwiczone banery adaptacyjne. Mają zmienną wysokość i mogą być tak wysokie jak ekran urządzenia. Wbudowane banery adaptacyjne są zalecane zamiast zakotwiczonych banerów adaptacyjnych w aplikacjach, które umieszczają banery reklamowe w przewijanych treściach. Więcej informacji znajdziesz w artykule o wbudowanych banerach adaptacyjnych.

Przeglądaj inne tematy