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

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

Когда загружается нативное объявление, ваше приложение получает объект объявления, содержащий его ресурсы, и за их отображение отвечает приложение, а не 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 до тех пор, пока не завершится загрузка первого запроса.

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

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

Аппаратное ускорение видеорекламы

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

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

Включение аппаратного ускорения

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

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

Покажите свое объявление

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