Рекламная лента

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

Это руководство покажет, как интегрировать ленту в Android‐приложение. В дополнение к примерам кода и инструкции оно содержит рекомендации по использованию данного формата рекламы, а также ссылки на дополнительные ресурсы.

Внешний вид

Пререквизит

  1. Выполните шаги по интеграции sdk, описанные в Быстром старте.
  2. Заранее проинициализируйте рекламный SDK.
  3. Убедитесь, что используете самую актуальную версию Yandex Mobile Ads SDK.

Имплементация

Основные шаги по интеграции рекламной ленты с объявлениями:

  • Задать параметры внешнего вида рекламной ленты через объект FeedAdAppearance.
  • Создать и настроить конфигурацию запроса через объект FeedAdRequestConfiguration.
  • Создать объект рекламной ленты FeedAd и зарегистрировать слушатель методов обратного вызова загрузки FeedAdLoadListener.
  • Как можно раньше предзагрузить рекламу, вызвав feedAd.preloadAd().
  • Создать адаптер FeedAdAdapter и зарегистрировать слушатель методов обратного вызова событий FeedAdEventListener.
  • Установить FeedAdAdapter в RecyclerView.adapter.

Основные шаги

  1. Создайте объект конфигурации внешнего вида рекламной ленты FeedAdAppearance.

    Доступны следующие параметры:

    • cardWidth (обязательный параметр) - задает ширину показываемого рекламного объявления в dp. Для расчета этого параметра ориентируйтесь на ширину экрана, вычитая необходимые отступы по бокам.
    • cardCornerRadius - задает радиус скругления углов показываемого рекламного объявления в dp.
    val feedMarginDp = 24
    val screenWidthDp = (screenWidth / resources.displayMetrics.density).roundToInt()
    val cardWidthDp = screenWidthDp - 2 * feedMarginDp
    val cardCornerRadiusDp = 16.0
    
    val feedAdAppearance = FeedAdAppearance.Builder(cardWidthDp)
              .setCardCornerRadius(cardCornerRadiusDp)
              .build()
    
    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
    
    int feedMarginDp = 24;
    int screenWidthDp = Math.round(displayMetrics.widthPixels / displayMetrics.density);
    val cardWidthDp = screenWidthDp - 2 * feedMarginDp;
    double cardCornerRadius = 16.0;
    
    FeedAdAppearance feedAdAppearance = new FeedAdAppearance.Builder(cardWidth)
        .setCardCornerRadius(cardCornerRadius)
        .build();
    
  2. Создайте и сконфигурируйте объект параметров запроса FeedAdRequestConfiguration.

    Потребуется идентификатор рекламного места, полученный вами в ПИ (AD_UNIT_ID).

    Расширить параметры запроса за рекламой можно, передав в методах Builder данные об интересах пользователя, контекстные данные страницы, локацию или другие дополнительные данные. Дополнительные контекстные данные на запросе могут значительно улучшить качество рекламы. Подробнее читайте в разделе Таргетирование рекламы.

    val AD_UNIT_ID = "R-M-XXXXXX-Y" // For debugging reasons you can use "demo-feed-yandex"
    val feedAdRequestConfiguration = FeedAdRequestConfiguration.Builder(AD_UNIT_ID).build()
    
    String AD_UNIT_ID = "R-M-XXXXXX-Y"; // For debugging reasons you can use "demo-feed-yandex"
    FeedAdRequestConfiguration feedAdRequestConfiguration = new FeedAdRequestConfiguration.Builder(AD_UNIT_ID).build();
    
  3. Создайте объект рекламной ленты FeedAd и зарегистрируйте слушатель методов обратного вызова загрузки FeedAdLoadListener.

    val feedAdLoadListener = object : FeedAdLoadListener {
    
        override fun onAdLoaded() {
              // Called when additional ads are received for display
        }
    
        override fun onAdFailedToLoad(error: AdRequestError) {
              // Called when additional ads request fails
        }
    }
    
    val feedAd = FeedAd.Builder(context, feedAdRequestConfiguration, feedAdAppearance).build()
    feedAd.loadListener = feedAdLoadListener
    
    FeedAdLoadListener feedAdLoadListener = new FeedAdLoadListener() {
        @Override
        public void onAdLoaded() {
            // Called when additional ads are received for display
        }
    
        @Override
        public void onAdFailedToLoad(AdRequestError error) {
            // Called when additional ads request fails
        }
    };
    
    FeedAd feedAd = new FeedAd.Builder(context, feedAdRequestConfiguration, feedAdAppearance).build();
    feedAd.setLoadListener(feedAdLoadListener);
    
  4. Как можно раньше предзагрузите рекламное объявление с помощью метода preloadAd() у FeedAd. По завершению предзагрузки рекламной ленты будет вызван один из методов FeedAdLoadListener.

    feedAd.preloadAd()
    
    feedAd.preloadAd();
    
  5. Создайте адаптер FeedAdAdapter и зарегистрируйте слушатель методов обратного вызова событий FeedAdEventListener.

    val feedAdEventListener = object : FeedAdEventListener {
    
        override fun onAdClicked() {
              // Called when user clicked on the ad
        }
    
        override fun onAdImpression(impressionData: ImpressionData?) {
              // Called when impression was observed
        }
    }
    
    val feedAdAdapter = FeedAdAdapter(feedAd)
    feedAdAdapter.eventListener = feedAdEventListener
    
    FeedAdEventListener feedAdEventListener = new FeedAdEventListener() {
        @Override
        public void onAdClicked() {
            // Called when user clicked on the ad
        }
    
        @Override
        public void onAdImpression(ImpressionData impressionData) {
            // Called when impression was observed
        }
    };
    
    FeedAdAdapter feedAdAdapter = new FeedAdAdapter(feedAd);
    feedAdAdapter.setEventListener(feedAdEventListener);
    
  6. Отобразите рекламную ленту.

    Установите созданный FeedAdAdapter в RecyclerView.adapter.

    • Kotlin

      binding.feedRecyclerView.layoutManager = LinearLayoutManager(context)
      binding.feedRecyclerView.adapter = feedAdAdapter
      
    • Java

      binding.feedRecyclerView.setLayoutManager(new LinearLayoutManager(context));
      binding.feedRecyclerView.setAdapter(feedAdAdapter);
      

    Для добавления рекламной ленты к существующему списку RecycerView нужно воспользоваться ConcatAdapter.

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

    • Kotlin

      val screenContentDataAdapter = ScreenContentDataAdapter() // Your own implementation of RecyclerView.Adapter
      val concatAdapter = ConcatAdapter(listOf(screenContentDataAdapter, feedAdAdapter))
      
      binding.feedRecyclerView.layoutManager = LinearLayoutManager(context)
      binding.feedRecyclerView.adapter = concatAdapter
      
    • Java

      ScreenContentDataAdapter screenContentDataAdapter = new ScreenContentDataAdapter(); // Your own implementation of RecyclerView.Adapter
      ConcatAdapter concatAdapter = new ConcatAdapter(Arrays.asList(screenContentDataAdapter, feedAdAdapter));
      
      binding.feedRecyclerView.setLayoutManager(new LinearLayoutManager(context));
      binding.feedRecyclerView.setAdapter(concatAdapter);
      

Особенности подключения рекламной ленты

  1. Все вызовы методов Yandex Mobile Ads SDK необходимо выполнять из главного потока.

Тестирование интеграции рекламной ленты

Использование демоблоков для тестирования рекламы

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

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

Демонстрационный adUnitId: demo-feed-yandex.

Важно

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

Список всех доступных демонстрационных идентификаторов рекламного места доступен в разделе Демоблоки для тестирования.

Проверка корректной интеграции рекламы

Проверить корректность интеграции рекламной ленты можно через встроенный в sdk анализатор.

Данный инструмент проверяет корректность подключения рекламы и выводит в лог подробный отчет. Для просмотра отчета, выполните поиск по ключевому слову "YandexAds" в инструменте отладки Android-приложений Logcat.

adb logcat -v brief '*:S YandexAds'

В случае успешной интеграции, вы увидите следующее сообщение:

adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type feed was integrated successfully

В случае обнаружения проблем при интеграции рекламы — подробный отчет о проблемах и рекомендации по их устранению.