В этом руководстве рассматривается загрузка прикрепленного адаптивного баннера в приложение для Android.
Предпосылки
- Заполните руководство по началу работы .
- Необязательно: для примера реализации баннерной рекламы выберите одно из следующих примеров приложений:
- Пример адаптивной баннерной рекламы с привязкой к Java , Kotlin или Jetpack Compose .
- Демонстрация расширенных возможностей Java или Kotlin .
Всегда проверяйте с помощью тестовых объявлений
При создании и тестировании приложений обязательно используйте тестовые объявления, а не реальные, производственные. В противном случае ваш аккаунт может быть заблокирован.
Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для баннеров Android:
/21775744923/example/adaptive-banner
Он специально настроен для возврата тестовых объявлений при каждом запросе, и вы можете использовать его в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой идентификатор рекламного блока перед публикацией приложения.
Дополнительную информацию о работе тестовых объявлений Google Mobile Ads SDK см. в разделе Включение тестовых объявлений .
Определить вид рекламы
XML-макет
Добавьте представление в XML-файл макета, который будет служить контейнером для вашего прикрепленного адаптивного баннера:
<!-- 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
Включите модуль JetpackComposeDemo/compose-util . Этот модуль включает в себя вспомогательные инструменты для компоновки объекта
AdViewи ресурсов.Создайте класс
BannerAdиз модуляcompose-util:
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
Установите размер объявления
Установите AdSize для привязанного адаптивного типа баннера с указанной шириной:
Ява
// 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))
Jetpack Compose
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
Добавьте AdManagerAdView в макет
Создайте AdManagerAdView , используя размер объявления, чтобы добавить его в макет вашего приложения:
Ява
// 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)
Jetpack Compose
val adView = remember { AdManagerAdView(context) }
// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = ADMANANGER_ADAPTIVE_BANNER_AD_UNIT_ID
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(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) }
}
Загрузить объявление
После того, как AdManagerAdView готов, следующим шагом будет загрузка рекламы. Это делается с помощью метода loadAd() класса AdManagerAdView . Он принимает параметр AdManagerAdRequest , содержащий информацию времени выполнения, например, данные о таргетинге, об одном запросе рекламы.
Вот пример, показывающий, как загрузить рекламу:
Ява
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
Котлин
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
В случае успеха ваше приложение готово к показу баннерной рекламы.
Обновить объявление
Если вы настроили обновление рекламного блока, вам не нужно запрашивать повторное объявление, если предыдущее не загружается. Google Mobile Ads SDK учитывает любую частоту обновления, указанную в интерфейсе Менеджера рекламы. Если обновление не включено, отправьте новый запрос. Подробнее об обновлении рекламного блока, например, о настройке частоты обновления, см. в статье Частота обновления рекламы в мобильных приложениях .
Выпуск рекламного ресурса
После завершения использования рекламного баннера вы можете освободить его ресурсы.
Чтобы освободить ресурс объявления, необходимо удалить объявление из иерархии представлений и удалить все его ссылки:
Ява
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;
}
Котлин
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
}
Рекламные события
Вы можете отслеживать ряд событий жизненного цикла объявления, включая загрузку, показ и клик по объявлению, а также открытие и закрытие объявления. Рекомендуется настроить обратный вызов до загрузки баннера.Ява
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.
}
});
}
Котлин
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.
}
}
Каждый из переопределяемых методов в AdListener соответствует событию в жизненном цикле объявления.
| Переопределяемые методы | |
|---|---|
onAdClicked() | Метод onAdClicked() вызывается при регистрации клика по рекламному объявлению. |
onAdClosed() | Метод onAdClosed() вызывается, когда пользователь возвращается в приложение после просмотра целевого URL-адреса рекламы. Ваше приложение может использовать его для возобновления приостановленных действий или выполнения любых других действий, необходимых для подготовки к взаимодействию. |
onAdFailedToLoad() | Метод onAdFailedToLoad() — единственный, который включает параметр. Параметр error типа LoadAdError описывает произошедшую ошибку. Подробнее см. в документации «Отладка ошибок загрузки рекламы» . |
onAdImpression() | Метод onAdImpression() вызывается при регистрации показа рекламного объявления. |
onAdLoaded() | Метод onAdLoaded() выполняется после завершения загрузки рекламы. Если вы хотите отложить добавление AdManagerAdView в Activity или фрагмент, например, до тех пор, пока не будете уверены, что реклама будет загружена, это можно сделать здесь. |
onAdOpened() | Метод onAdOpened() вызывается, когда реклама открывает наложение, покрывающее экран. |
Аппаратное ускорение для видеорекламы
Для успешного показа видеорекламы в баннерной рекламе необходимо включить аппаратное ускорение .
Аппаратное ускорение включено по умолчанию, но некоторые приложения могут его отключить. Если это относится к вашему приложению, мы рекомендуем включить аппаратное ускорение для классов Activity , использующих рекламу.
Включить аппаратное ускорение
Если ваше приложение работает некорректно при глобальном включении аппаратного ускорения, вы можете управлять им и для отдельных действий. Чтобы включить или отключить аппаратное ускорение, используйте атрибут android:hardwareAccelerated для элементов <application> и <activity> в файле AndroidManifest.xml . В следующем примере аппаратное ускорение включается для всего приложения, но отключается для одного действия:
<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>
Дополнительную информацию о параметрах управления аппаратным ускорением см. в руководстве по аппаратному ускорению . Обратите внимание, что аппаратное ускорение для отдельных показов рекламы невозможно включить, если активность отключена, поэтому для самой активности необходимо включить аппаратное ускорение.
Ручной подсчет показов
Ручной подсчёт показов совместим только с кампаниями с прямыми продажами и собственными кампаниями, где креативы размещаются непосредственно в Менеджере рекламы. Его не следует использовать для заполнения или рекламы в сторонних сетях. Подробнее см. в разделе «Подсчёт показов и кликов» .
Вы можете вручную отправлять запросы на показ в Ad Manager, если у вас есть особые условия, когда следует регистрировать показ:
Ява
if (adManagerAdView != null) {
adManagerAdView.setManualImpressionsEnabled(true);
}
Котлин
adManagerAdView?.setManualImpressionsEnabled(true)
Когда вы определили, что объявление успешно возвращено и находится на экране, вы можете вручную зафиксировать показ:
Ява
if (adManagerAdView != null) {
adManagerAdView.recordManualImpression();
}
Котлин
adManagerAdView?.recordManualImpression()
События приложения
События приложения позволяют создавать объявления, которые могут отправлять сообщения в код приложения. Приложение может выполнять действия на основе этих сообщений.
Вы можете прослушивать события приложения Менеджера рекламы с помощью AppEventListener . Эти события могут произойти в любой момент жизненного цикла объявления, даже до вызова метода onAdLoaded() .
Установите AppEventListener в вашем AdManagerAdView :
Ява
if (adManagerAdView != null) {
adManagerAdView.setAppEventListener(this);
}
Котлин
adManagerAdView?.appEventListener = this
Вот пример, показывающий, как изменить цвет фона вашего приложения в зависимости от события приложения с именем цвета:
Ява
@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;
}
}
}
Котлин
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.
}
}
}
}
А вот соответствующий креатив, который отправляет слушателю сообщения о событиях цветового приложения:
<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>
Реализацию событий приложения в демонстрационном приложении API см. в примере «События приложения менеджера рекламы».
Следующие шаги
Складные баннеры
Сворачиваемые баннеры — это баннеры, которые изначально отображаются в виде увеличенного наложения с кнопкой, позволяющей свернуть объявление до меньшего размера. Рассмотрите возможность использования этого варианта для дальнейшей оптимизации эффективности. Подробнее см. в разделе «Сворачиваемые баннеры» .
Встроенные адаптивные баннеры
Встроенные адаптивные баннеры крупнее и выше, чем закреплённые адаптивные баннеры. Они имеют переменную высоту, которая может достигать высоты экрана устройства. Встроенные адаптивные баннеры рекомендуются для приложений, размещающих рекламу в прокручиваемом контенте, а не закреплённые адаптивные баннеры. Подробнее см. в разделе «Встроенные адаптивные баннеры» .