В этом руководстве рассказывается, как загрузить адаптивный фиксированный баннер в приложение для Android.
Требования
- Настройте Google Mobile Ads SDK (Legacy).
- При необходимости выберите одно из следующих приложений с примером реализации баннерной рекламы:
- Пример фиксированного адаптивного баннера на Java, Kotlin или Jetpack Compose.
- Демоверсия продвинутых функций на языке Java или Kotlin.
Всегда тестируйте с помощью тестовых объявлений
При создании и тестировании приложений используйте тестовые объявления, а не реальные. В противном случае ваш аккаунт может быть заблокирован.
Самый простой способ загрузить тестовые объявления – использовать специальный идентификатор тестового рекламного блока для баннеров Android:
/21775744923/example/adaptive-banner
Он специально настроен на то, чтобы возвращать тестовые объявления для каждого запроса, и вы можете использовать его в своих приложениях при написании кода, тестировании и отладке. Только не забудьте заменить его на свой идентификатор рекламного блока перед публикацией приложения.
Подробнее о том, Google Mobile Ads SDK (Legacy) как включить тестовые объявления…
Как определить просмотр объявления
Макет 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
Добавьте папку JetpackCompose Utilities. В этой папке содержатся вспомогательные функции для создания объекта
AdViewи объектов.Как написать письмо в приложении "
AdView"
// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
Box(modifier = modifier.fillMaxWidth()) { AdManagerBannerAd(adView, modifier) }
}
Как задать размер объявления
Большие адаптивные баннеры – это более крупный формат, предназначенный для макетов без прокрутки. По сравнению со стандартными фиксированными адаптивными баннерами, эти баннеры могут иметь большую максимальную высоту – до 20% высоты экрана и от 50 до 150 dp. Это пространство оптимизировано для видеоконтента.
Задайте для параметра AdSize тип фиксированного адаптивного баннера с указанной шириной:
Java
// Request an anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, 360));
Kotlin
// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(this, 360))
Jetpack Compose
// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(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);
Kotlin
// Create a new ad view.
val adView = AdManagerAdView(this)
adView.adUnitId = AD_UNIT_ID
// Request a large anchored adaptive banner with a width of 360.
adView.setAdSize(AdSize.getLargeAnchoredAdaptiveBannerAdSize(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 = ADMANAGER_ADAPTIVE_BANNER_AD_UNIT_ID
// Set a large anchored adaptive banner ad size with a given width.
val adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(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 загружается фиксированный адаптивный баннер шириной 360 пикселей:
Java
AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);
Kotlin
val adRequest = AdManagerAdRequest.Builder().build()
adView.loadAd(adRequest)
Как обновить объявление
Если вы настроили обновление рекламного блока, вам не нужно запрашивать другое объявление, когда не удается загрузить текущее. Google Mobile Ads SDK (Legacy) учитывает любую частоту обновления, указанную в интерфейсе Менеджера рекламы. Если вы не включили обновление, отправьте новый запрос. Подробнее об обновлении рекламных блоков, в том числе о том, как задать частоту обновления, рассказывается в статье Частота обновления объявлений в мобильных приложениях.
Как освободить рекламный ресурс
Когда вы закончите использовать баннерную рекламу, вы можете освободить ресурсы баннерной рекламы.
Чтобы освободить ресурс объявления, удалите объявление из иерархии View и отмените все ссылки на него:
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;
}
Kotlin
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.
}
});
}
Kotlin
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. В следующем примере показано, как включить аппаратное ускорение для всего приложения, но отключить его для одного объекта activity:
<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>
Подробнее о том, как управлять аппаратным ускорением… Обратите внимание, что отдельные просмотры объявлений нельзя включить для аппаратного ускорения, если оно отключено для действия.
Подсчет показов вручную
Подсчет показов вручную доступен только для кампаний с прямой продажей и собственных кампаний с креативами, размещаемыми непосредственно в Менеджере рекламы. Его не следует использовать для объявлений для заполнения или объявлений из сторонних сетей. Подробнее о подсчете показов и кликов…
Вы можете вручную отправлять запросы ping в Менеджер рекламы, если у вас есть особые условия для регистрации показов:
Java
if (adManagerAdView != null) {
adManagerAdView.setManualImpressionsEnabled(true);
}
Kotlin
adManagerAdView?.setManualImpressionsEnabled(true)
Когда вы убедитесь, что объявление успешно возвращено и показывается на экране, вы можете вручную зарегистрировать показ:
Java
if (adManagerAdView != null) {
adManagerAdView.recordManualImpression();
}
Kotlin
adManagerAdView?.recordManualImpression()
События в приложении
События в приложении позволяют создавать объявления, которые могут отправлять сообщения в код приложения. После этого приложение может выполнять действия на основе этих сообщений.
Вы можете отслеживать события приложений, относящиеся к Менеджеру рекламы, с помощью AppEventListener.
Эти события могут происходить в любой момент жизненного цикла объявления, даже до вызова функции onAdLoaded().
Настройте AppEventListener на устройстве AdManagerAdView:
Java
if (adManagerAdView != null) {
adManagerAdView.setAppEventListener(this);
}
Kotlin
adManagerAdView?.appEventListener = this
Ниже приведен пример того, как изменить цвет фона приложения в зависимости от события с названием "цвет".
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;
}
}
}
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.
}
}
}
}
Ниже приведен код креатива, который отправляет сообщения о событиях в приложении, связанные с цветом, в прослушиватель:
<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 Demo можно найти в разделе "События приложения Менеджера рекламы".
Дальнейшие действия
Сворачиваемые баннеры
Сворачиваемые баннеры сначала показываются в виде большого оверлея, который пользователь может свернуть до стандартного размера. Используйте его, чтобы повысить эффективность рекламы. Подробнее о сворачиваемых баннерах…
Встроенные адаптивные баннеры
Встроенные адаптивные баннеры больше и выше, чем фиксированные. Они имеют переменную высоту и могут занимать весь экран устройства. Встроенные адаптивные баннеры рекомендуются вместо фиксированных адаптивных баннеров для приложений, в которых баннеры размещаются в контенте с прокруткой. Подробнее о встроенных адаптивных баннерах…