Anuncios nativos

Selecciona la plataforma: Android iOS Flutter Unity

Los anuncios nativos son recursos de anuncios que se presentan a los usuarios a través de componentes de IU nativos de la plataforma. Se muestran con los mismos tipos de vistas que ya utilizas para crear tus diseños y se pueden adaptar al diseño visual de tu app.

Cuando se carga un anuncio nativo, tu app recibe un objeto de anuncio que contiene sus recursos, y la app (en lugar del SDK de anuncios de Google para dispositivos móviles) es responsable de mostrarlos.

En términos generales, la implementación correcta de anuncios nativos consta de dos partes: cargar un anuncio con el SDK y, luego, mostrar el contenido del anuncio en tu app.

En esta página, se muestra cómo usar el SDK para cargar anuncios nativos. Sugerencia: Obtén más información sobre los anuncios nativos en nuestro Manual de anuncios nativos.

También puedes consultar algunas historias de éxito de clientes: caso de éxito 1 y caso de éxito 2.

Requisitos previos

Realiza siempre pruebas con anuncios de prueba

Cuando compiles y pruebes tus apps, asegúrate de usar anuncios de prueba en vez de anuncios activos en fase de producción.

La forma más sencilla de cargar anuncios de prueba es usar nuestro ID de unidad de anuncios de prueba exclusivo para anuncios nativos en Android:

ca-app-pub-3940256099942544/2247696110

Se configuró especialmente para devolver anuncios de prueba en cada solicitud, y puedes usarlo en tus propias apps mientras codificas, pruebas y depuras. Solo asegúrate de reemplazarlo por tu propio ID de unidad de anuncios antes de publicar tu app.

Para obtener más información sobre cómo funcionan los anuncios de prueba del SDK de anuncios de Google para dispositivos móviles, consulta Anuncios de prueba.

Carga anuncios

Los anuncios nativos se cargan con la clase AdLoader, que tiene su propia clase Builder para personalizarla durante la creación. Cuando se agrega objetos de escucha al AdLoader durante su compilación, una app especifica qué tipos de anuncios nativos está lista para recibir. Luego, AdLoader solicita solo esos tipos.

Cómo compilar un AdLoader

En el siguiente código, se muestra cómo compilar un AdLoader que puede cargar anuncios nativos:

Java

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();

Kotlin

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()

El método forNativeAd() se encarga de preparar el AdLoader para el formato NativeAd. Cuando un anuncio se carga correctamente, se llama al método onNativeAdLoaded() del objeto de escucha.

Configura un AdListener con AdLoader (opcional)

Cuando se crea el AdLoader, la función withAdListener establece un AdListener para el cargador. El método toma un AdListener como su único parámetro, que recibe devoluciones de llamada del AdLoader cuando se producen eventos del ciclo de vida del anuncio:

Java

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

Kotlin

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

Solicitar anuncios

Una vez que termines de compilar un AdLoader, es momento de usarlo para solicitar anuncios. Existen dos métodos disponibles para esto: loadAd() y loadAds().

loadAd()

Este método envía una solicitud para un solo anuncio.

Java

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

Kotlin

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

loadAds()

Este método envía una solicitud para varios anuncios (hasta cinco):

Java

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

Kotlin

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

Ambos métodos toman un objeto AdRequest como primer parámetro. Esta es la misma clase AdRequest que usan los banners y los anuncios intersticiales, y puedes usar métodos de la clase AdRequest para agregar información de segmentación, tal como lo harías con otros formatos de anuncios.

Carga varios anuncios (opcional)

El método loadAds() toma un parámetro adicional: la cantidad de anuncios que el SDK debe intentar cargar para la solicitud. Este número tiene un límite de cinco, y no se garantiza que el SDK devuelva la cantidad exacta de anuncios solicitados.

Todos los anuncios de Google que se devuelvan serán diferentes entre sí, aunque no se garantiza que los anuncios del inventario reservado o de los compradores externos sean únicos.

No uses el método loadAds() si utilizas la mediación, ya que las solicitudes de varios anuncios nativos no funcionan actualmente para los IDs de bloques de anuncios que se configuraron para la mediación.

Devoluciones de llamada

Después de una llamada a loadAd(), se realiza una sola devolución de llamada a los métodos de escucha definidos anteriormente para entregar el objeto del anuncio nativo o informar un error.

Después de una llamada a loadAds(), se realizan varias devoluciones de llamada de este tipo (al menos una y no más que la cantidad de anuncios solicitados). Las apps que solicitan varios anuncios deben llamar a AdLoader.isLoading() en sus implementaciones de devolución de llamada para determinar si finalizó el proceso de carga.

A continuación, se incluye un ejemplo que muestra cómo verificar isLoading() en la devolución de llamada onNativeAdLoaded():

Java

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);

Kotlin

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)

Liberar recursos

Asegúrate de usar el método destroy() en los anuncios nativos cargados. Esto libera los recursos utilizados y evita las fugas de memoria.

Asegúrate de que todas las referencias a NativeAd se destruyan en el método onDestroy() de tu actividad.

En tu devolución de llamada onNativeAdLoaded, asegúrate de destruir los anuncios nativos existentes a los que se anulará la referencia.

Otra verificación clave es si la actividad se destruye y, de ser así, llama a destroy() en el anuncio devuelto y regresa de inmediato:

Java

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();

Kotlin

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()

Prácticas recomendadas

Sigue estas reglas cuando cargues anuncios.

  • Las apps que usan anuncios nativos en una lista deben almacenar en caché previamente la lista de anuncios.

  • Cuando realices la precarga de anuncios, borra la caché y vuelve a cargarla después de una hora.

  • No llames a loadAd() ni a loadAds() en un AdLoader hasta que finalice la carga de la primera solicitud.
  • Limita el almacenamiento en caché de anuncios nativos solo a lo que sea necesario. Por ejemplo, cuando se realiza el almacenamiento previo en caché, solo se almacenan en caché los anuncios que son visibles de inmediato en la pantalla. Los anuncios nativos tienen una gran huella de memoria, y almacenarlos en caché sin destruirlos genera un uso excesivo de la memoria.

  • Destruye los anuncios nativos cuando ya no los uses.

Aceleración de hardware para anuncios de video

Para que los anuncios de video se muestren correctamente en las vistas de tus anuncios nativos, debe estar habilitada la aceleración por hardware.

La aceleración de hardware está habilitada de forma predeterminada, pero algunas apps pueden inhabilitarla. Si esto se aplica a tu app, te recomendamos que habilites la aceleración por hardware para las clases de Activity que usan anuncios.

Cómo habilitar la aceleración de hardware

Si tu app no se comporta de manera adecuada con la aceleración de hardware activada globalmente, también puedes controlarla en actividades individuales. Para habilitar o inhabilitar la aceleración de hardware, usa el atributo android:hardwareAccelerated para los elementos <application> y <activity> en tu AndroidManifest.xml. En el siguiente ejemplo, se habilita la aceleración de hardware para toda la app, pero se inhabilita para una actividad:

<application android:hardwareAccelerated=">true&<quot;
    !-- For activities that use ads, hardwareAcceleration should b>e tru<e. --
    activity android:hardwareAccelerate>d=&qu<ot;true" /
    !-- For activities that don't use ads, hardwareAccel>erati<on can be false. --
    activity android:hardw>a<reAccelerate>d="false" /
/application

Consulta la guía de aceleración por hardware para obtener más información sobre las opciones para controlar la aceleración por hardware. Ten en cuenta que las vistas de anuncios individuales no se pueden habilitar para la aceleración de hardware si la actividad está inhabilitada, por lo que la actividad en sí debe tener habilitada la aceleración de hardware.

Mostrar tu anuncio

Una vez que hayas cargado un anuncio, solo te quedará mostrarlo a tus usuarios. Visita nuestra guía avanzada sobre anuncios nativos para saber cómo hacerlo.