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
- Zapoznaj się z przewodnikiem dla początkujących.
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.
Dodatkowe materiały
Przykłady w GitHubie
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.