Нативная реклама

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

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

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

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

На этой странице показано, как использовать SDK для загрузки нативной рекламы . Совет: узнайте больше о нативной рекламе в нашем руководстве по нативной рекламе .

Вы также можете ознакомиться с историями успеха некоторых клиентов: пример 1 , пример 2 .

Предпосылки

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

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

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

ca-app-pub-3940256099942544/2247696110

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

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

Загрузить рекламу

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

Создайте AdLoader

Следующий код демонстрирует, как создать AdLoader , который может загружать нативную рекламу:

Ява

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Котлин

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110}")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // Handle the failure.
        }
    })
    .withNativeAdOptions(NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build()

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

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

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

Ява

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Котлин

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

Запрос рекламы

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

loadAd()

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

Ява

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

Котлин

adLoader.loadAd(AdRequest.Builder().build())

loadAds()

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

Ява

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Котлин

adLoader.loadAds(AdRequest.Builder().build(), 3)

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

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

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

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

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

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

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

После вызова loadAds() выполняется несколько таких обратных вызовов (минимум один и не более количества запрошенных объявлений). Приложения, запрашивающие несколько рекламных объявлений, должны вызывать AdLoader.isLoading() в своих реализациях обратных вызовов, чтобы определить, завершен ли процесс загрузки.

Вот пример, показывающий, как проверить isLoading() в обратном вызове onNativeAdLoaded() :

Ява

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();
adLoader.loadAds(new AdRequest.Builder().build(), 3);

Котлин

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd {
        ...
        // some code that displays the ad.
        ...
        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()
adLoader.loadAds(AdRequest.Builder().build(), 3)

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

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

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

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

Другая ключевая проверка — уничтожена ли активность, и если да, то вызвать destroy() для возвращенного объявления и немедленно вернуться:

Ява

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            nativeAd.destroy();
            return;
        }
        ...
    }
}).build();

Котлин

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

Лучшие практики

Соблюдайте эти правила при загрузке объявлений.

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

  • При предварительном кэшировании рекламы очистите кэш и перезагрузите страницу через час.

  • Не вызывайте loadAd() или loadAds() в 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>

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

Покажите свою рекламу

После загрузки рекламы вам останется только показывать её пользователям. Подробнее об этом читайте в нашем руководстве Native Advanced .