Как настроить баннеры

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

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

Требования

Всегда используйте тестовые объявления

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

Проще всего загрузить тестовые объявления, используя идентификатор тестового рекламного блока для баннеров 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

  1. Добавьте папку JetpackCompose Utilities. В этой папке находятся вспомогательные файлы для создания объекта AdView и объектов.

  2. Написать 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)

Задайте размер объявления, который не превышает размер экрана устройства. Чтобы определить максимальный размер экрана, используйте метод Resources.getDisplayMetrics. Размеры объекта AdSize указываются в пикселях, не зависящих от плотности экрана (dp). При сравнении преобразуйте размер экрана из пикселей в dp. Подробнее об ограничениях по размеру см. в статье Устранение неполадок, связанных с невыполненными показами, в Менеджере рекламы.

Добавить 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) }
}

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

В следующем примере фиксированный адаптивный баннер шириной 360 загружается в объект AdManagerAdView:

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
}

Jetpack Compose

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

События объявлений

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

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. В следующем примере аппаратное ускорение включено для всего приложения, но отключено для одного действия:

<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 app можно найти в разделе "События приложения в Менеджере рекламы".

Java Kotlin JetpackCompose

Дальнейшие действия

Сворачиваемые баннеры

Сворачиваемые баннеры – это баннеры, которые сначала показываются в виде большого оверлея с кнопкой, позволяющей свернуть объявление до меньшего размера. Попробуйте использовать его, чтобы повысить эффективность. Подробнее о сворачиваемых баннерах…

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

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

Другие темы