Нативные объявления

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

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

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

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

Предпосылки

Всегда тестируйте тестовые объявления

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

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

ca-app-pub-3940256099942544/2247696110

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

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

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

Нативные объявления загружаются с помощью класса AdLoader , у которого есть собственный класс Builder для его настройки во время создания. Добавляя прослушиватели в 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 by logging, altering the UI, and so on.
        }
    })
    .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 Advanced , чтобы узнать, как это сделать.