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

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

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

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

Предварительные условия

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

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

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

/6499/example/adaptive-banner

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

Дополнительную информацию о том, как работают тестовые объявления Mobile Ads SDK, см. в разделе Тестовые объявления .

Добавьте AdManagerAdView в макет.

Первым шагом к отображению баннера является размещение AdManagerAdView в макете Activity или Fragment , в котором вы хотите его отобразить.:

Джава

private AdSize getAdSize() {
  // Determine the screen width (less decorations) to use for the ad width.
  Display display = getWindowManager().getDefaultDisplay();
  DisplayMetrics outMetrics = new DisplayMetrics();
  display.getMetrics(outMetrics);

  float density = outMetrics.density;

  float adWidthPixels = adContainerView.getWidth();

  // If the ad hasn't been laid out, default to the full screen width.
  if (adWidthPixels == 0) {
    adWidthPixels = outMetrics.widthPixels;
  }

  int adWidth = (int) (adWidthPixels / density);
  return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
}

private void loadBanner() {
  
  // Create a new ad view.
  AdManagerAdView adView = new AdManagerAdView(this);
  adView.setAdSizes(getAdSize());
  adView.setAdUnitId("/6499/example/adaptive-banner");

  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Котлин


// Determine the screen width (less decorations) to use for the ad width.
// If the ad hasn't been laid out, default to the full screen width.
private val adSize: AdSize
  get() {
    val display = windowManager.defaultDisplay
    val outMetrics = DisplayMetrics()
    display.getMetrics(outMetrics)

    val density = outMetrics.density

    var adWidthPixels = binding.adViewContainer.width.toFloat()
    if (adWidthPixels == 0f) {
      adWidthPixels = outMetrics.widthPixels.toFloat()
    }

    val adWidth = (adWidthPixels / density).toInt()
    return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
  }

private fun loadBanner() {
  
  // Create a new ad view.
  val adView = AdManagerAdView(this)
  adView.adSizes = adSize
  adView.adUnitId = "/6499/example/adaptive-banner"

  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

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

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

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

Джава

private void loadBanner() {
  // Create a new ad view.
  adView = new AdManagerAdView(this);
  adView.setAdUnitId(AD_UNIT);
  adView.setAdSize(getAdSize());
  
  // Replace ad container with new ad view.
  adContainerView.removeAllViews();
  adContainerView.addView(adView);

  // Start loading the ad in the background.
  AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
  adView.loadAd(adRequest);
}

Котлин

private fun loadBanner() {
  // This is an ad unit ID for a test ad. Replace with your own banner ad unit ID.
  adView.adUnitId = "/6499/example/banner"
  adView.setAdSize(adSize)
  
  // Create an ad request.
  val adRequest = AdManagerAdRequest.Builder().build()

  // Start loading the ad in the background.
  adView.loadAd(adRequest)
}

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

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

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

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

Джава

AdManagerAdView.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.
    }
});

Котлин

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

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

Ручной подсчет показов

Подсчет показов вручную совместим только с кампаниями с прямой продажей и собственными кампаниями, в которых креативы размещаются непосредственно в Менеджере рекламы. Его не следует использовать для заполнения или рекламы в сторонних сетях. Подробнее см. в разделе Подсчет показов и кликов .

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

Джава

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build();

Котлин

val adRequest = AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build()

Когда вы определите, что объявление было успешно возвращено и отображается на экране, вы можете вручную записать показ:

Джава

AdManagerAdView.recordManualImpression();

Котлин

AdManagerAdView.recordManualImpression()

События приложения

События приложения позволяют создавать рекламу, которая может отправлять сообщения в код приложения. Затем приложение может предпринимать действия на основе этих сообщений.

Вы можете прослушивать определенные события приложения Менеджера рекламы с помощью AppEventListener . Эти события могут произойти в любой момент жизненного цикла объявления, даже до вызова onAdLoaded() .

Джава

public interface AppEventListener {
  void onAppEvent(String name, String info);
}

Котлин

interface AppEventListener {
    fun onAppEvent(name: String, info: String)
}

void onAppEvent(String name, String info) вызывается, когда в объявлении происходит событие приложения. Этот интерфейс может быть реализован вашей деятельностью или любым другим объектом:

Джава

import com.google.android.gms.ads.admanager.*;

public class BannerExample extends Activity implements AppEventListener {
}

Котлин

import com.google.android.gms.ads.admanager.*

class BannerExample : Activity(), AppEventListener {
}

а затем передается в AdManagerAdView :

Джава

AdManagerAdView.setAppEventListener(this);

Котлин

AdManagerAdView.appEventListener = this

Вот пример, показывающий, как изменить цвет фона вашего приложения в зависимости от события приложения с именем цвета:

Джава

@Override
public void onAppEvent(String name, String info) {
  if ("color".equals(name)) {
    if ("green".equals(info)) {
      // Set background color to green.
    } else if ("blue".equals(info)) {
      // Set background color to blue.
    } else {
      // Set background color to black.
    }
  }
}

Котлин

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.

Java Котлин

Дополнительные ресурсы

Примеры на GitHub

  • Пример прикрепленного адаптивного баннера: Java | Котлин
  • Демонстрация расширенных функций: Java | Котлин

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

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

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

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

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

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