Banery reklamowe

Banery reklamowe to prostokątne reklamy, które zajmują część układu aplikacji. Pozostają na ekranie, gdy użytkownicy wchodzą w interakcję z aplikacją – są zakotwiczone u góry lub u dołu ekranu albo pozostają w tekście podczas przewijania strony. Banery reklamowe mogą odświeżać się automatycznie po upływie określonego czasu. Więcej informacji znajdziesz w artykule Omówienie banerów reklamowych.

Z tego przewodnika dowiesz się, jak zacząć korzystać z zakotwiczonych banerów adaptacyjnych, które maksymalizują skuteczność, optymalizując rozmiar reklamy na każdym urządzeniu z wykorzystaniem podanej przez Ciebie szerokości reklamy.

Zakotwiczone banery adaptacyjne to reklamy o stałym współczynniku proporcji zamiast standardowych reklam o stałym rozmiarze. Format obrazu jest podobny do standardu branżowego 320 x 50. Gdy określisz pełną szerokość, wyświetli się reklama o optymalnej wysokości dla tej szerokości. Optymalna wysokość nie zmienia się w przypadku żądań z tego samego urządzenia, a otaczające je widoki nie muszą przesuwać się, gdy reklama jest odświeżana.

Wymagania wstępne

Zawsze korzystaj z reklam testowych

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

Najłatwiejszym sposobem wczytania reklam testowych jest użycie naszego dedykowanego testowego identyfikatora jednostki reklamowej do banerów na Androida:

/21775744923/example/banner

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 tylko, by przed opublikowaniem aplikacji zastąpić go identyfikatorem jednostki reklamowej.

Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.

Dodaj AdManagerAdView do układu

Pierwszym krokiem do wyświetlenia banera jest umieszczenie elementu AdManagerAdView w układzie elementu Activity lub Fragment, w którym ma się on wyświetlić:

Java

private AdSize getAdSize() {
  // Determine the screen width (less decorations) to use for the ad width.
  Display display = getWindowManager().getDefaultDisplay();
  DisplayMetrics outMetrics = new DisplayMetrics();
  display.getMetrics(outMetrics);

  float density = outMetrics.density;

  float adWidthPixels = adContainerView.getWidth();

  // If the ad hasn't been laid out, default to the full screen width.
  if (adWidthPixels == 0) {
    adWidthPixels = outMetrics.widthPixels;
  }

  int adWidth = (int) (adWidthPixels / density);
  return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
}

private void loadBanner() {
  
  // Create a new ad view.
  AdManagerAdView adView = new AdManagerAdView(this);
  adView.setAdSizes(getAdSize());
  adView.setAdUnitId("/21775744923/example/banner");

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

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Kotlin


// Determine the screen width (less decorations) to use for the ad width.
// If the ad hasn't been laid out, default to the full screen width.
private val adSize: AdSize
  get() {
    val display = windowManager.defaultDisplay
    val outMetrics = DisplayMetrics()
    display.getMetrics(outMetrics)

    val density = outMetrics.density

    var adWidthPixels = binding.adViewContainer.width.toFloat()
    if (adWidthPixels == 0f) {
      adWidthPixels = outMetrics.widthPixels.toFloat()
    }

    val adWidth = (adWidthPixels / density).toInt()
    return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
  }

private fun loadBanner() {
  
  // Create a new ad view.
  val adView = AdManagerAdView(this)
  adView.adSizes = adSize
  adView.adUnitId = "/21775744923/example/banner"

  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

Wczytywanie reklamy

Gdy AdManagerAdView będzie już gotowy, następnym krokiem jest wczytanie reklamy. Użyjesz metody loadAd() w klasie AdManagerAdView. Potrzebny jest parametr AdManagerAdRequest, który zawiera informacje o czasie działania, np. o kierowaniu, dotyczące pojedynczego żądania reklamy.

Oto przykład wczytywania reklamy w metodzie onCreate() Activity:

Java

private void loadBanner() {
  // Create a new ad view.
  adView = new AdManagerAdView(this);
  adView.setAdUnitId(AD_UNIT);
  adView.setAdSize(getAdSize());
  
  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Kotlin

private fun loadBanner() {
  // This is an ad unit ID for a test ad. Replace with your own banner ad unit ID.
  adView.adUnitId = "/6499/example/banner"
  adView.setAdSize(adSize)
  
  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

Jeśli reklama nie zostanie wczytana, nie musisz prosić o coś innego, o ile masz skonfigurowane odświeżanie jednostki reklamowej. Pakiet SDK do reklam mobilnych Google respektuje każdą częstotliwość odświeżania określoną w interfejsie internetowym Ad Manager. Jeśli nie masz włączonego odświeżania, musisz przesłać nową prośbę.

Znakomicie. Twoja aplikacja jest już gotowa do wyświetlania banerów reklamowych.

Zdarzenia reklamowe

Możesz wykrywać szereg zdarzeń w cyklu życia reklamy, takich jak wczytywanie, wyświetlenie i kliknięcie, a także zdarzenia otwarcia i zamknięcia reklamy. Zalecamy ustawienie wywołania zwrotnego przed wczytaniem banera.

Java

AdManagerAdView.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(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

AdManagerAdView.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ępować w parametrze AdListener, odpowiada zdarzeniu w cyklu życia reklamy.

Metody, które można zastępować
onAdClicked() Metoda onAdClicked() jest wywoływana po zarejestrowaniu kliknięcia reklamy.
onAdClosed() Metoda onAdClosed() jest wywoływana, gdy użytkownik wróci do aplikacji po wyświetleniu docelowego adresu URL reklamy. Aplikacja może jej używać do wznawiania zawieszonych działań lub wykonywania innych czynności niezbędnych do przygotowania się do interakcji.
onAdFailedToLoad() Metoda onAdFailedToLoad() jest jedyną metodą, która zawiera parametr. Parametr błędu typu LoadAdError opisuje, jaki błąd wystąpił. Więcej informacji znajdziesz w dokumentacji debugowania błędów wczytywania reklam.
onAdImpression() Metoda onAdImpression() jest wywoływana po zarejestrowaniu wyświetlenia reklamy.
onAdLoaded() Metoda onAdLoaded() jest wykonywana po zakończeniu wczytywania reklamy. Jeśli chcesz opóźnić dodanie elementu AdManagerAdView do aktywności lub fragmentu do momentu, aż będziesz mieć pewność, że reklama zostanie wczytana, możesz to zrobić np. tutaj.
onAdOpened() Metoda onAdOpened() jest wywoływana, gdy reklama otwiera nakładkę zasłaniającą ekran.

Akceleracja sprzętowa reklam wideo

Aby reklamy wideo wyświetlały się w wyświetleniach 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łączam akcelerację sprzętową

Jeśli aplikacja nie działa prawidłowo po włączeniu akceleracji sprzętowej na całym świecie, możesz ją kontrolować także 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 AndroidManifest.xml. Ten przykład włącza akcelerację sprzętową dla całej aplikacji, ale wyłącza ją w przypadku jednego działania:

<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 na temat opcji sterowania akceleracją sprzętową znajdziesz w przewodniku po akceleracji sprzętowej. Pamiętaj, że nie można włączyć akceleracji sprzętowej pojedynczego wyświetlenia reklamy, jeśli aktywność jest wyłączona, więc sama aktywność musi mieć włączoną tę funkcję.

Ręczne liczenie wyświetleń

Ręczne liczenie wyświetleń jest zgodne tylko z kampaniami ze sprzedażą bezpośrednią i w kampaniach autoreklam z kreacjami trafikowanymi bezpośrednio w usłudze Ad Manager. Nie należy go używać w przypadku reklam zapasowych ani reklam z sieci zewnętrznych. Więcej informacji znajdziesz w artykule Zliczanie wyświetleń i kliknięć.

Jeśli masz szczególne warunki określające, kiedy wyświetlenia powinny być rejestrowane, możesz ręcznie wysyłać do Ad Managera pingi wyświetleń. W tym celu przed załadowaniem reklamy włącz AdManagerAdRequest w przypadku wyświetleń ręcznych:

Java

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build();

Kotlin

val adRequest = AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build()

Gdy ustalisz, że reklama została zwrócona i pokazana na ekranie, możesz zarejestrować wyświetlenie ręcznie:

Java

AdManagerAdView.recordManualImpression();

Kotlin

AdManagerAdView.recordManualImpression()

Zdarzenia w aplikacjach

Zdarzenia w aplikacji pozwalają tworzyć reklamy, które mogą wysyłać komunikaty do kodu aplikacji. Na podstawie tych komunikatów aplikacja może podejmować działania.

Możesz nasłuchiwać zdarzeń Ad Managera w aplikacjach za pomocą parametru AppEventListener. Te zdarzenia mogą wystąpić w dowolnym momencie cyklu życia reklamy, nawet przed wywołaniem funkcji onAdLoaded().

Java

public interface AppEventListener {
  void onAppEvent(String name, String info);
}

Kotlin

interface AppEventListener {
    fun onAppEvent(name: String, info: String)
}

Funkcja void onAppEvent(String name, String info) jest wywoływana, gdy w reklamie wystąpi zdarzenie w aplikacji. Interfejs można wdrożyć za pomocą aktywności lub innego obiektu:

Java

import com.google.android.gms.ads.admanager.*;

public class BannerExample extends Activity implements AppEventListener {
}

Kotlin

import com.google.android.gms.ads.admanager.*

class BannerExample : Activity(), AppEventListener {
}

a następnie przekazana do AdManagerAdView:

Java

AdManagerAdView.setAppEventListener(this);

Kotlin

AdManagerAdView.appEventListener = this

Oto przykład zmiany koloru tła aplikacji w zależności od zdarzenia w aplikacji o nazwie koloru:

Java

@Override
public void onAppEvent(String name, String info) {
  if ("color".equals(name)) {
    if ("green".equals(info)) {
      // Set background color to green.
    } else if ("blue".equals(info)) {
      // Set background color to blue.
    } else {
      // Set background color to black.
    }
  }
}

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 detektora komunikaty o zdarzeniach w aplikacji oznaczonej kolorami:

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

W przykładzie Zdarzenia w aplikacji z Ad Managera znajdziesz przykład implementacji zdarzeń w aplikacji w aplikacji demonstracyjnej interfejsu API.

Java Kotlin

Dodatkowe materiały

Przykłady w GitHubie

  • Przykład zakotwiczonych banerów adaptacyjnych: Java | Kotlin
  • Prezentacja funkcji zaawansowanych: Java | Kotlin

Dalsze kroki

Banery zwijane

Zwijane banery reklamowe to banery reklamowe, które początkowo wyświetlają się jako większa nakładka oraz przycisk, który zwija reklamę do mniejszego rozmiaru. Warto go używać do dalszej optymalizacji skuteczności. Więcej informacji znajdziesz w artykule o zwijanych banerach reklamowych.

Wbudowane banery adaptacyjne

Banery adaptacyjne śródtekstowe są większe i wyższe niż zakotwiczone banery adaptacyjne. Mają zmienną wysokość i równą wysokość ekranu urządzenia. Śródtekstowe banery adaptacyjne sprawdzają się zamiast zakotwiczonych banerów adaptacyjnych w aplikacjach, które umieszczają banery reklamowe w treściach przewijanych. Więcej informacji znajdziesz w artykule o wbudowanych banerach adaptacyjnych.

Przeglądaj inne tematy