В этом руководстве рассматривается загрузка адаптивного баннерного объявления с привязкой к определенному объекту в приложение для 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
Включите модуль 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 на адаптивный баннер с привязкой к определенному типу и заданной шириной:
Java
// 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
// Set the adaptive banner ad size with a given width.
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(LocalContext.current, 360)
adView.setAdSize(adSize)
Добавьте AdManagerAdView в макет.
Создайте элемент AdManagerAdView , используя размер объявления, чтобы добавить его в макет вашего приложения:
Java
// 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
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 , который содержит информацию о текущем состоянии, например, данные о таргетинге, для одного запроса объявления.
Вот пример, демонстрирующий, как загрузить рекламу:
Java
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
Котлин
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
В случае успеха ваше приложение готово к показу баннерной рекламы.
Обновить рекламу
Если вы настроили обновление рекламного блока, вам не нужно запрашивать новый рекламный блок, если предыдущий не загружается. Google Mobile Ads SDK учитывает любую частоту обновления, указанную вами в пользовательском интерфейсе Ad Manager. Если вы не включили обновление, отправьте новый запрос. Для получения более подробной информации об обновлении рекламного блока, например, о настройке частоты обновления, см. раздел «Частота обновления для рекламы в мобильных приложениях» .
Разместите рекламный ресурс
По завершении показа баннерной рекламы вы можете освободить ее ресурсы.
Чтобы освободить ресурсы объявления, необходимо удалить объявление из иерархии представлений и удалить все ссылки на него:
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;
}
Котлин
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
}
Рекламные мероприятия
Вы можете отслеживать ряд событий в жизненном цикле объявления, включая загрузку, показ и клик по объявлению, а также события открытия и закрытия объявления. Рекомендуется устанавливать функцию обратного вызова до загрузки баннера.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.
}
});
}
Котлин
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 в вашу активность или фрагмент до тех пор, пока не убедитесь, что реклама будет загружена, вы можете сделать это здесь. |
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, и кампаниями, созданными собственными силами компании, с креативами, размещаемыми непосредственно в Ad Manager. Его не следует использовать для заполнения пробелов в рекламе или для рекламы сторонних сетей. Для получения более подробной информации см. раздел «Подсчет показов и кликов» .
Вы можете вручную отправлять уведомления о показах в Ad Manager, если у вас установлены особые условия для регистрации показов:
Java
if (adManagerAdView != null) {
adManagerAdView.setManualImpressionsEnabled(true);
}
Котлин
adManagerAdView?.setManualImpressionsEnabled(true)
Когда вы убедитесь, что объявление успешно получено и отображается на экране, вы можете вручную зарегистрировать показ:
Java
if (adManagerAdView != null) {
adManagerAdView.recordManualImpression();
}
Котлин
adManagerAdView?.recordManualImpression()
События приложений
События приложения позволяют создавать рекламные объявления, которые могут отправлять сообщения в код приложения. Затем приложение может выполнять действия на основе этих сообщений.
С помощью AppEventListener можно отслеживать события приложения, специфичные для Ad Manager. Эти события могут происходить в любое время в течение жизненного цикла объявления, даже до вызова onAdLoaded() .
Установите обработчик AppEventListener для вашего AdManagerAdView :
Java
if (adManagerAdView != null) {
adManagerAdView.setAppEventListener(this);
}
Котлин
adManagerAdView?.appEventListener = this
Вот пример, демонстрирующий, как изменить цвет фона вашего приложения в зависимости от события приложения с именем color:
Java
@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 можно посмотреть в примере Ad Manager App Events.
Следующие шаги
Складные баннеры
Сворачиваемые баннеры — это баннеры, которые изначально отображаются в виде увеличенного всплывающего окна с кнопкой для сворачивания объявления до меньшего размера. Рекомендуется использовать их для дальнейшей оптимизации производительности. Подробнее см. в разделе «Сворачиваемые баннеры» .
Встроенные адаптивные баннеры
Встроенные адаптивные баннеры — это более крупные и высокие баннеры по сравнению с привязанными адаптивными баннерами. Их высота может быть переменной и соответствовать высоте экрана устройства. Встроенные адаптивные баннеры рекомендуются вместо привязанных адаптивных баннеров для приложений, размещающих баннерную рекламу в прокручиваемом контенте. Подробнее см. в разделе «Встроенные адаптивные баннеры» .