Рекламные баннеры

Выберите платформу: Android iOS Unity Flutter

Рекламные баннеры — это прямоугольные объявления, занимающие часть макета приложения. Закреплённые адаптивные баннеры — это реклама с фиксированным соотношением сторон, которая остаётся на экране, пока пользователи взаимодействуют с приложением, либо закрепляясь в верхней, либо в нижней части экрана.

В этом руководстве рассматривается загрузка прикрепленного адаптивного баннера в приложение для Android.

Предпосылки

  • Заполните руководство по началу работы .
  • Необязательно: для примера реализации баннерной рекламы выберите одно из следующих примеров приложений:
    • Пример адаптивной баннерной рекламы с привязкой к Java , Kotlin или Jetpack Compose .
    • Демонстрация расширенных возможностей Java или Kotlin .

Всегда проверяйте с помощью тестовых объявлений

При создании и тестировании приложений обязательно используйте тестовые объявления, а не реальные, производственные. В противном случае ваш аккаунт может быть заблокирован.

Самый простой способ загрузить тестовую рекламу — использовать наш специальный идентификатор тестового рекламного блока для баннеров Android:

ca-app-pub-3940256099942544/9214589741

Он специально настроен для возврата тестовых объявлений при каждом запросе, и вы можете использовать его в своих приложениях при кодировании, тестировании и отладке. Просто убедитесь, что вы заменили его на свой идентификатор рекламного блока перед публикацией приложения.

Дополнительную информацию о работе тестовых объявлений 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

  1. Шаг первый: включите модуль JetpackComposeDemo/compose-util . Этот модуль включает в себя вспомогательные функции для компоновки объекта AdView и ресурсов.

  2. Шаг второй. Создайте класс BannerAd с помощью модуля compose-util :


// Place the ad view at the bottom of the screen.
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) {
  Box(modifier = modifier.fillMaxWidth()) { BannerAd(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)

Добавить AdView в макет

Создайте AdView , используя размер рекламы, чтобы добавить ее в макет вашего приложения:

Ява


// Create a new ad view.
adView = new AdView(this);
adView.setAdUnitId(AD_UNIT_ID);
// 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 = AdView(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 { AdView(context) }

// Setup and load the adview.
// Set the unique ID for this specific ad unit.
adView.adUnitId = 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()) { BannerAd(adView, modifier) }
}

Загрузить объявление

После того, как AdView готов, следующим шагом будет загрузка рекламы. Это делается с помощью метода loadAd() класса AdView . Он принимает параметр AdRequest , содержащий информацию времени выполнения, например, данные о таргетинге, об одном запросе рекламы.

Вот пример, показывающий, как загрузить рекламу:

Ява

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
adView.loadAd(adRequest);

Котлин

val adRequest = AdRequest.Builder().build()
adView.loadAd(adRequest)

В случае успеха ваше приложение готово к показу баннерной рекламы.

Обновить объявление

Если вы настроили обновление рекламного блока, вам не нужно запрашивать повторное объявление, если предыдущее не загружается. Google Mobile Ads SDK учитывает любую частоту обновления, указанную в пользовательском интерфейсе AdMob. Если обновление не включено, отправьте новый запрос. Подробнее об обновлении рекламного блока, например, о настройке частоты обновления, см. в статье Использование автоматического обновления для баннерной рекламы .

Выпуск рекламного ресурса

После завершения использования рекламного баннера вы можете освободить его ресурсы.

Чтобы освободить ресурс объявления, необходимо удалить объявление из иерархии представлений и удалить все его ссылки:

Котлин

// 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

Ява

// Remove banner from view hierarchy.
if (adView.getParent() instanceof ViewGroup) {
  ((ViewGroup) adView.getParent()).removeView(adView);
}
// Destroy the banner ad resources.
adView.destroy();
// Drop reference to the banner ad.
adView = null;

Jetpack Compose


DisposableEffect(Unit) {
  // Destroy the AdView to prevent memory leaks when the screen is disposed.
  onDispose { adView.destroy() }
}

Рекламные события

Вы можете отслеживать ряд событий жизненного цикла объявления, включая загрузку, показ и клик по объявлению, а также открытие и закрытие объявления. Рекомендуется настроить обратный вызов до загрузки баннера.

Ява

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.
    }
}

Каждый из переопределяемых методов в AdListener соответствует событию в жизненном цикле объявления.

Переопределяемые методы
onAdClicked() Метод onAdClicked() вызывается при регистрации клика по рекламному объявлению.
onAdClosed() Метод onAdClosed() вызывается, когда пользователь возвращается в приложение после просмотра целевого URL-адреса рекламы. Ваше приложение может использовать его для возобновления приостановленных действий или выполнения любых других действий, необходимых для подготовки к взаимодействию. Реализацию методов прослушивателя рекламы см. в примере AdMob AdListener в демонстрационном приложении Android API.
onAdFailedToLoad() Метод onAdFailedToLoad() — единственный, который включает параметр. Параметр error типа LoadAdError описывает произошедшую ошибку. Подробнее см. в документации «Отладка ошибок загрузки рекламы» .
onAdImpression() Метод onAdImpression() вызывается при регистрации показа рекламного объявления.
onAdLoaded() Метод onAdLoaded() выполняется после завершения загрузки рекламы. Если вы хотите отложить добавление AdView в 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>

Дополнительную информацию о параметрах управления аппаратным ускорением см. в руководстве по аппаратному ускорению. Обратите внимание, что аппаратное ускорение для отдельных показов рекламы невозможно включить, если активность отключена, поэтому для самой активности необходимо включить аппаратное ускорение.

Следующие шаги

Складные баннеры

Сворачиваемые баннеры — это баннеры, которые изначально отображаются в виде увеличенного наложения с кнопкой, позволяющей свернуть объявление до меньшего размера. Рассмотрите возможность использования этого варианта для дальнейшей оптимизации эффективности. Подробнее см. в разделе «Сворачиваемые баннеры» .

Встроенные адаптивные баннеры

Встроенные адаптивные баннеры крупнее и выше, чем закреплённые адаптивные баннеры. Они имеют переменную высоту, которая может достигать высоты экрана устройства. Встроенные адаптивные баннеры рекомендуются для приложений, размещающих рекламу в прокручиваемом контенте, а не закреплённые адаптивные баннеры. Подробнее см. в разделе «Встроенные адаптивные баннеры» .

Изучите другие темы