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

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

Когда нативное объявление загружается, ваше приложение получает объект объявления, содержащий его объекты, и именно приложение, а не Google Mobile Ads SDK (Legacy), отвечает за их показ.

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

В этой статье рассказывается, как использовать SDK для загрузки нативных объявлений.

Требования

Прежде чем продолжить, настройте Google Mobile Ads SDK (Legacy).

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

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

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

/21775744923/example/native

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

Подробнее о тестовых объявлениях Google Mobile Ads SDK (Legacy) рассказывается в статье Как включить тестовые объявления.

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

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

Как создать AdLoader

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

Java

// It is recommended to call AdLoader.Builder on a background thread.
new Thread(
        () -> {
          AdLoader adLoader =
              new AdLoader.Builder(context, "AD_UNIT_ID")
                  .forNativeAd(
                      new NativeAd.OnNativeAdLoadedListener() {
                        @Override
                        // The native ad loaded successfully. You can show the ad.
                        public void onNativeAdLoaded(@NonNull NativeAd nativeAd) {}
                      })
                  .withAdListener(
                      new AdListener() {
                        @Override
                        // The native ad load failed. Check the adError message for failure
                        // reasons.
                        public void onAdFailedToLoad(@NonNull LoadAdError adError) {}
                      })
                  // Use the NativeAdOptions.Builder class to specify individual options
                  // settings.
                  .withNativeAdOptions(new NativeAdOptions.Builder().build())
                  .build();
        })
    .start();

Kotlin

// It is recommended to call AdLoader.Builder on a background thread.
CoroutineScope(Dispatchers.IO).launch {
  val adLoader =
    AdLoader.Builder(context, "AD_UNIT_ID")
      .forNativeAd { nativeAd ->
        // The native ad loaded successfully. You can show the ad.
      }
      .withAdListener(
        object : AdListener() {
          override fun onAdFailedToLoad(adError: LoadAdError) {
            // The native ad load failed. Check the adError message for failure reasons.
          }
        }
      )
      // Use the NativeAdOptions.Builder class to specify individual options settings.
      .withNativeAdOptions(NativeAdOptions.Builder().build())
      .build()
}

Замените AD_UNIT_ID идентификатором тестового устройства.

Метод forNativeAd() отвечает за подготовку AdLoader для формата NativeAd. Когда объявление успешно загружено, вызывается метод onNativeAdLoaded() объекта прослушивателя.

Как настроить AdListener с помощью AdLoader (необязательно)

При создании AdLoader функция withAdListener задает AdListener для загрузчика. Метод принимает в качестве единственного параметра объект AdListener, который получает обратные вызовы от объекта AdLoader при возникновении событий жизненного цикла объявлений:

Java

adLoaderBuilder.withAdListener(
    // Override AdListener callbacks here.
    new AdListener() {});

Kotlin

adLoaderBuilder.withAdListener(
  // Override AdListener callbacks here.
  object : AdListener() {}
)

Запросить объявления

После того как вы создали AdLoader, вы можете использовать его для запроса объявлений. Для этого есть два метода: loadAd() и loadAds().

loadAd()

Этот метод отправляет запрос на одно объявление.

Java

adLoader.loadAd(new AdManagerAdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdManagerAdRequest.Builder().build())

loadAds()

Этот метод отправляет запрос на несколько объявлений (до пяти):

Java

// Load three native ads.
adLoader.loadAds(new AdManagerAdRequest.Builder().build(), 3);

Kotlin

// Load three native ads.
adLoader.loadAds(AdManagerAdRequest.Builder().build(), 3)

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

Загрузка нескольких объявлений (необязательно)

Метод loadAds() принимает дополнительный параметр – количество объявлений, которые SDK должен попытаться загрузить по запросу. Максимальное количество объявлений – пять. Нет гарантии, что SDK вернет именно то количество объявлений, которое было запрошено.

Все возвращенные объявления Google будут отличаться друг от друга, однако уникальность объявлений из зарезервированного инвентаря или от сторонних покупателей не гарантируется.

Не используйте метод loadAds(), если вы применяете медиацию, поскольку запросы на несколько нативных объявлений не работают с идентификаторами рекламных блоков, настроенных для медиации.

Обратные вызовы

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

Освобождение ресурсов

Обязательно используйте метод destroy() для загруженных нативных объявлений. Это освобождает используемые ресурсы и предотвращает утечки памяти.

Убедитесь, что все ссылки на NativeAd удалены в методе onDestroy().

В обратном вызове onNativeAdLoaded удалите все существующие нативные объявления, на которые не будет ссылок.

Ещё одна важная проверка – уничтожено ли действие. Если да, вызовите destroy() для возвращенного объявления и сразу же вернитесь:

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

Рекомендации

При загрузке объявлений соблюдайте следующие правила:

  • Приложения, в которых нативные объявления показываются в списках, должны предварительно кешировать эти списки.

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

  • Не вызывайте функцию loadAd() для объекта AdLoader, пока не завершится загрузка первого запроса.
  • Кешируйте только необходимые нативные объявления. Например, при предварительном кешировании кешируйте только те объявления, которые сразу видны на экране. Нативные объявления занимают много памяти, и их кеширование без удаления приводит к чрезмерному использованию памяти.

  • Удаляйте нативные объявления, когда они больше не используются.

Аппаратное ускорение для видеообъявлений

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

Аппаратное ускорение включено по умолчанию, но некоторые приложения могут его отключать. Если это относится к вашему приложению, рекомендуем включить аппаратное ускорение для классов 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>

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

Показ объявления

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