Anuncios nativos

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

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

En términos generales, existen dos partes para implementar con éxito los anuncios nativos: cargar un anuncio mediante el SDK y luego mostrar el contenido del anuncio en su aplicación.

En esta página, se muestra cómo usar el SDK para cargar anuncios nativos.

Requisitos previos

Realice pruebas siempre con anuncios de prueba

Cuando compiles y pruebes tus apps, asegúrate de usar anuncios de prueba en lugar de anuncios de producción publicados.

La forma más fácil de cargar anuncios de prueba es usar nuestro ID de unidades de anuncios de prueba dedicado para los anuncios nativos en Android:

ca-app-pub-3940256099942544/2247696110

Se configuró especialmente para mostrar anuncios de prueba en cada solicitud, y puedes usarlo en tus propias apps mientras codificas, pruebas y depuras. Solo asegúrate de reemplazarlo con 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 los anuncios móviles de Google, consulta Anuncios de prueba.

Cargando anuncios

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

Cómo crear un elemento 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 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()

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

Cómo configurar un objeto AdListener con AdLoader (opcional)

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

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 crear un AdLoader, es momento de usarlo para solicitar anuncios. Hay dos métodos disponibles para hacerlo: loadAd() y loadAds().

loadAd()

Este método envía una solicitud de 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, como lo harías con otros formatos de anuncios.

Cargar 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. La cantidad máxima es de cinco, y no se garantiza que el SDK muestre la cantidad exacta de anuncios solicitados.

Los anuncios de Google que se muestren 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 para varios anuncios nativos no funcionan actualmente para los ID de unidades 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 previamente para entregar el objeto de 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 de la cantidad de anuncios solicitados). Las apps que solicitan varios anuncios deben llamar a AdLoader.isLoading() en sus implementaciones de devoluciones de llamada para determinar si finalizó el proceso de carga.

En este ejemplo, se 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úrese de usar el método destroy() en los anuncios nativos cargados. Esto libera recursos usados y evita fugas de memoria.

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

En la devolución de llamada onNativeAdLoaded, asegúrate de destruir cualquier anuncio nativo existente al que se haga referencia.

Otra verificación clave es si se destruye la actividad y, de ser así, llamar a destroy() en el anuncio que se muestra y mostrar 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 aplicaciones que usan anuncios nativos en una lista deben almacenar en caché la lista de anuncios previamente.

  • Cuando guarde anuncios en caché, borre la caché y vuelva a cargarlos después de una hora.

  • No llames a loadAd() ni a loadAds() en AdLoader hasta que la primera solicitud termine de cargarse.

Aceleración de hardware para anuncios de video

Para que los anuncios de video se muestren correctamente en las vistas de anuncios nativos, debes habilitar la aceleración de 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 de hardware para las clases de actividad que usan anuncios.

Cómo habilitar la aceleración de hardware

Si tu app no se comporta correctamente con la aceleración de hardware activada de manera global, también puedes controlarla en actividades individuales. A fin de 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">
    <!-- 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>

Consulta la guía de aceleración de hardware a fin de obtener más información sobre las opciones para controlar la aceleración de 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 misma debe tener habilitada la aceleración de hardware.

Muestra tu anuncio

Una vez que cargues un anuncio, lo único que queda es mostrarlo a tus usuarios. Consulta nuestra guía de anuncios nativos avanzados para ver cómo hacerlo.