W tym przewodniku znajdziesz informacje o wczytywaniu zakotwiczonego banera reklamowego w aplikacji na Androida.
Wymagania wstępne
- Zapoznaj się z przewodnikiem dla początkujących.
Zawsze testuj reklamy za pomocą reklam testowych
Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie reklam produkcyjnych. Jeśli tego nie zrobisz, możemy zawiesić Twoje konto.
Najłatwiej wczytać reklamy testowe, używając dedykowanego identyfikatora testowej jednostki reklamowej dla banerów na Androida:
/21775744923/example/adaptive-banner
Jest on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać w swoich aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.
Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych Google znajdziesz w artykule Włączanie reklam testowych.
Definiowanie kontenera widoku reklamy
Dodaj widok do pliku XML układu, aby służył jako kontener dla zadokowanej reklamy adaptacyjnej w formie banera:
<!-- 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" />
Ustaw rozmiar reklamy.
Ustaw parametr AdSize
na zakotwiczony typ banera adaptacyjnego o określonej szerokości:
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
Dodawanie AdManagerAdView
do układu
Utwórz AdManagerAdView
, korzystając z rozmiaru reklamy, aby dodać ją do układu aplikacji:
// 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);
// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360))
this.adView = adView
// Replace ad container with new ad view.
binding.adViewContainer.removeAllViews()
binding.adViewContainer.addView(adView)
Wczytywanie reklamy
Gdy AdManagerAdView
będzie gotowe, następnym krokiem będzie przesłanie reklamy. W tym celu użyj metody loadAd()
w klasie AdManagerAdView
. Używa on parametru AdManagerAdRequest
, który zawiera informacje o czasie wykonywania, np. informacje o kierowaniu, dotyczące pojedynczego żądania reklamy.
Oto przykładowy sposób wczytywania reklamy:
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
Jeśli test się powiedzie, Twoja aplikacja będzie gotowa do wyświetlania reklam typu baner.
Odświeżanie reklamy
Jeśli jednostka reklamowa została skonfigurowana tak, aby się odświeżać, nie musisz prosić o wyświetlenie kolejnej reklamy, gdy nie uda się jej załadować. Pakiet SDK do reklam mobilnych Google uwzględnia częstotliwość odświeżania określoną w interfejsie Ad Managera. Jeśli nie włączysz odświeżania, wyślij nowe żądanie. Więcej informacji o odświeżaniu jednostek reklamowych, np. o ustalaniu częstotliwości odświeżania, znajdziesz w artykule Częstotliwość odświeżania reklam w aplikacjach mobilnych.
Zdarzenia reklamowe
Możesz słuchać wielu zdarzeń w cyklu życia reklamy, w tym ładowania, wyświetlenia i kliknięcia reklamy oraz zdarzeń otwarcia i zamknięcia reklamy. Zalecamy, aby ustawić wywołanie zwrotne przed załadowaniem banera.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(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.
}
});
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 obejrzeniu docelowego adresu URL reklamy. Aplikacja może go użyć do wznowienia zawieszonych działań lub wykonania innych czynności niezbędnych do przygotowania się do interakcji.
|
onAdFailedToLoad() |
Metoda onAdFailedToLoad() jest jedyną, która zawiera parametr. Parametr błędu typu LoadAdError opisuje błąd, który wystąpił. Więcej informacji znajdziesz w dokumentacji na temat rozwiązywania problemów z wczytywaniem 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 AdManagerAdView do aktywności lub fragmentu, aż upewnisz się, że reklama zostanie załadowana, możesz to zrobić tutaj.
|
onAdOpened() |
Metoda onAdOpened() jest wywoływana, gdy reklama otwiera nakładkę, która pokrywa ekran.
|
Sprzętowa akceleracja reklam wideo
Aby reklamy wideo wyświetlały się w przypadku wyświetleń banerów, musisz włączyć przyspieszenie sprzętowe.
Przyspieszenie sprzętowe jest domyślnie włączone, ale niektóre aplikacje mogą je wyłączyć. Jeśli dotyczy to Twojej aplikacji, zalecamy włączenie akceleracji sprzętowej dla klas Activity
, które korzystają z reklam.
Włączanie akceleracji sprzętowej
Jeśli aplikacja nie działa prawidłowo, gdy przyspieszenie sprzętowe jest włączone globalnie, możesz kontrolować to również w przypadku poszczególnych działań. Aby włączyć lub wyłączyć akcelerację sprzętową, możesz użyć atrybutu android:hardwareAccelerated
w elementach <application>
i <activity>
w pliku AndroidManifest.xml
. W tym przykładzie przyspieszenie sprzętowe jest włączone w przypadku całej aplikacji, ale wyłączone 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 na ten temat. Pamiętaj, że akceleracji sprzętowej nie można włączyć w przypadku poszczególnych wyświetleń reklam, jeśli dana aktywność jest wyłączona. Aby to zrobić, musisz włączyć akcelerację sprzętową dla całej aktywności.
Ręczne zliczanie wyświetleń
Ręczne liczenie wyświetleń jest zgodne tylko z kampaniami bezpośrednimi i autoreklamowymi, w których przypadku kreacje są trafikowane bezpośrednio w usłudze Ad Manager. Nie należy go używać do wyświetlania elementów zapasowych ani reklam z sieci zewnętrznych. Więcej informacji znajdziesz w artykule Zliczanie wyświetleń i kliknięć.
Jeśli masz specjalne warunki rejestrowania wyświetleń, możesz ręcznie wysyłać do Ad Managera pingi wyświetleń. Aby to zrobić, przed załadowaniem reklamy włącz AdManagerAdRequest
do wyświetleń ręcznych:
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
.setManualImpressionsEnabled(true)
.build();
val adRequest = AdManagerAdRequest.Builder()
.setManualImpressionsEnabled(true)
.build()
Gdy stwierdzisz, że reklama została zwrócona i jest widoczna na ekranie, możesz ręcznie zarejestrować wyświetlenie:
AdManagerAdView.recordManualImpression();
AdManagerAdView.recordManualImpression()
Zdarzenia w aplikacjach
Zdarzenia w aplikacjach umożliwiają tworzenie reklam, które mogą wysyłać komunikaty do kodu aplikacji. Aplikacja może następnie podejmować działania na podstawie tych wiadomości.
Zdarzenia aplikacji związane z Ad Managerem możesz nasłuchiwać za pomocą funkcji AppEventListener
.
Zdarzenia te mogą wystąpić w dowolnym momencie cyklu życia reklamy, nawet przed wywołaniem funkcji onAdLoaded()
.
public interface AppEventListener {
void onAppEvent(String name, String info);
}
interface AppEventListener {
fun onAppEvent(name: String, info: String)
}
void onAppEvent(String name, String info)
jest wywoływany, gdy w reklamie wystąpi zdarzenie aplikacji. Ten interfejs może być zaimplementowany przez Twoją aktywność lub dowolny inny obiekt:
import com.google.android.gms.ads.admanager.*;
public class BannerExample extends Activity implements AppEventListener {
}
import com.google.android.gms.ads.admanager.*
class BannerExample : Activity(), AppEventListener {
}
a potem przekazane do AdManagerAdView
:
AdManagerAdView.setAppEventListener(this);
AdManagerAdView.appEventListener = this
Oto przykładowy sposób zmiany koloru tła aplikacji w zależności od zdarzenia aplikacji o nazwie koloru:
@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.
}
}
}
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 tutaj jest odpowiednia kreacja, która wysyła do detektora wiadomości o zdarzeniach aplikacji dotyczącej kolorów:
<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>
Aby zobaczyć przykład implementacji zdarzeń aplikacji w aplikacji demonstracyjnej API, zapoznaj się z artykułem Zdarzenia aplikacji w Ad Managerze – przykład.
Dodatkowe materiały
Przykłady w GitHub
Dalsze kroki
Banery zwijane
Banery zwijane to banery reklamowe, które początkowo wyświetlają się jako większe nakładki z przyciskiem umożliwiającym zwijanie reklamy do mniejszego rozmiaru. Możesz go użyć, 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 od zakotwiczonych banerów adaptacyjnych. Mają zmienną wysokość i mogą zajmować całą wysokość ekranu. W przypadku aplikacji, które umieszczają banery reklamowe w treściach, które można przewijać, zalecamy stosowanie banerów śródtekstowych zamiast zakotwiczonych banerów adaptacyjnych. Więcej informacji znajdziesz w sekcji inline adaptive banner.