Los anuncios nativos son elementos del anuncio 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 utilizas para crear tus diseños y se pueden adaptar al diseño visual de la 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, existen dos partes para implementar anuncios nativos correctamente: cargar un anuncio con el SDK y, luego, mostrar su contenido en la 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 nuestra Guía de anuncios nativos.
También puedes consultar algunas historias de éxito de clientes: caso de éxito 1, caso de éxito 2.
Requisitos previos
- Completa la guía de introducción.
Siempre realiza pruebas con anuncios de prueba
Cuando compiles y pruebes tus apps, asegúrate de usar anuncios de prueba en lugar de anuncios publicados de producción.
La manera más fácil 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ó de forma especial para mostrar anuncios de prueba para 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 la 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 agregan objetos de escucha a AdLoader
cuando la compilas, una app especifica qué tipos de anuncios nativos está lista para
recibir. Luego, AdLoader
solo solicita esos tipos.
Cómo crear 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()
es responsable 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 elemento AdListener
como su único parámetro, que recibe devoluciones de llamada de AdLoader
cuando ocurren eventos de ciclo de vida de 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 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 su primer parámetro. Esta es la misma clase AdRequest
que usan los anuncios intersticiales y de banners, 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.
Cómo 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. Este número tiene un límite de cinco, y no se garantiza que el SDK devuelva la cantidad exacta de anuncios solicitados.
Los anuncios de Google que se muestran 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 usas la mediación, ya que, por el momento, las solicitudes de varios anuncios nativos no funcionan para los IDs 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 objeto de escucha definidos anteriormente 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 ese tipo (al menos uno 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)
Libera recursos
Asegúrate de usar el método destroy()
en los anuncios nativos cargados. De esta manera, se liberan los recursos utilizados y se evitan las 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 los anuncios nativos existentes a los que se anulará la referencia.
Otra verificación de clave es si se destruye la actividad y, de ser así, llama a destroy()
en el anuncio que se muestra y muestra un resultado 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 previamente la lista de anuncios en caché.
Cuando almacenes anuncios previamente en caché, borra la caché y vuelve a cargarla después de una hora.
No llames a
loadAd()
ni aloadAds()
en unAdLoader
hasta que la primera solicitud termine de cargarse.Limita la caché de anuncios nativos solo a lo que sea necesario. Por ejemplo, cuando se almacena en caché previamente, solo almacena en caché los anuncios que se ven de inmediato en la pantalla. Los anuncios nativos tienen un gran espacio en la memoria, y almacenar en caché los anuncios nativos sin destruirlos genera un uso excesivo de la memoria.
Destruye los anuncios nativos cuando ya no se usen.
Aceleración de hardware para los anuncios de video
Para que los anuncios de video se muestren correctamente en tus 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 Activity 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 a nivel global, también puedes controlarla para 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">
<!-- 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 sobre aceleración de hardware para 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 en sí debe tener habilitada la aceleración de hardware.
Cómo mostrar tu anuncio
Una vez que hayas cargado un anuncio, solo queda mostrarlo a tus usuarios. Consulta nuestra guía avanzada de anuncios nativos para ver cómo hacerlo.