Anuncios nativos avanzados

Los anuncios nativos avanzados son un formato en el que los recursos de anuncio se presentan a los usuarios mediante componentes de la interfaz que son nativos de la plataforma. Se muestran con los mismos tipos de vistas con los que creas tus diseños, y puedes darles el formato que quieras para que se adapten al diseño visual de la experiencia de usuario de la que forman parte. En términos de programación, esto implica que, cuando se carga un anuncio nativo, tu aplicación recibe un objeto NativeAd que contiene sus recursos y la aplicación los muestra (en lugar del SDK).

Los anuncios nativos pueden tener dos formatos definidos por el sistema: descarga de aplicaciones y contenido. Los anuncios de descarga de aplicaciones están representados por NativeAppInstallAd, y los de contenido, por NativeContentAd. Estos objetos contienen los recursos del anuncio nativo. En esta guía se muestra cómo integrar anuncios nativos avanzados en una aplicación para Android.

Requisitos previos

Cargar un anuncio

Los anuncios nativos se cargan mediante la clase AdLoader, que tiene su propia clase Builder para personalizarlos durante su creación. Al añadir agentes de escucha a AdLoader mientras lo creas, la aplicación especifica el tipo de anuncios nativos que puede recibir. De esta forma, AdLoader solo solicita anuncios de estos tipos.

Crear un AdLoader

El siguiente código es un ejemplo de cómo crear un AdLoader que puede cargar un anuncio de descarga de aplicaciones o un anuncio de contenido en una sola solicitud:

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forAppInstallAd(new OnAppInstallAdLoadedListener() {
        @Override
        public void onAppInstallAdLoaded(NativeAppInstallAd appInstallAd) {
            // Show the app install ad.
        }
    })
    .forContentAd(new OnContentAdLoadedListener() {
        @Override
        public void onContentAdLoaded(NativeContentAd contentAd) {
            // Show the content ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            // 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")
        .forAppInstallAd { ad : NativeAppInstallAd ->
            // Show the app install ad.
        }
        .forContentAd { ad : NativeContentAd ->
            // Show the content ad.
        }
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(errorCode: Int) {
                // 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()

Preparar lo necesario para los formatos individuales

Los dos primeros métodos anteriores se encargan de preparar el AdLoader para un tipo de anuncio nativo concreto:

forAppInstallAd()
Al llamar a este método, se configura el AdLoader para solicitar los anuncios de descarga de aplicaciones. Cuando un anuncio se carga correctamente, se llama al método onAppInstallAdLoaded() del objeto de agente de escucha.
forContentAd()
Este método funciona igual que forAppInstallAd(), pero con anuncios de contenido. Cuando un anuncio se carga correctamente, se invoca el método onContentAdLoaded() en el objeto de agente de escucha.

Incluso cuando AdLoader tiene controladores para varios formatos de anuncios nativos, el SDK solo hace una solicitud de anuncio. Google selecciona y muestra el anuncio que maximiza el rendimiento del editor.

Usar AdListener con un AdLoader

Durante la creación del AdLoader anterior, la función withAdListener establece un AdListener.

Se trata de un paso opcional. El método utiliza un AdListener como único parámetro, que recibe retrollamadas desde el AdLoader cuando se producen eventos del ciclo de vida del anuncio.

Java

.withAdListener(new AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

Hay una diferencia importante entre el funcionamiento de los AdListeners con anuncios nativos y su funcionamiento con banners e intersticiales. Como el AdLoader tiene sus propios agentes de escucha específicos del formato (NativeAppInstallAd.OnAppInstallAdLoadedListener y otros) que se usan cuando el anuncio se ha cargado, no se llama al método onAdLoaded() del AdListener cuando el anuncio nativo se carga correctamente.

Opciones de configuración

withNativeAdOptions()

La última función incluida al crear el AdLoader anterior es withNativeAdOptions(), otro método opcional:

Java

.withNativeAdOptions(new NativeAdOptions.Builder()
    // Methods in the NativeAdOptions.Builder class can be
    // used here to specify individual options settings.
    .build()
)

Kotlin

.withNativeAdOptions(NativeAdOptions.Builder()
    // Methods in the NativeAdOptions.Builder class can be
    // used here to specify individual options settings.
    .build()
)

El objeto NativeAdOptions permite que las aplicaciones asignen sus propias opciones específicas al hacer la solicitud. Su clase Builder ofrece los siguientes métodos, que se pueden usar al crear una instancia:

setReturnUrlsForImageAssets()

Los recursos de imagen para anuncios nativos se devuelven mediante instancias de NativeAd.Image, que contiene un Drawable y un Uri. Si esta opción es "false" (su valor predeterminado), el SDK obtiene los recursos de imagen automáticamente y rellena tanto el Drawable como el Uri. Sin embargo, si es "true", el SDK solo rellena el campo Uri, por lo que puedes descargar las imágenes que quieras.

setImageOrientation()

Algunas creatividades tienen varias imágenes para adaptarse a las distintas orientaciones del dispositivo. Al llamar a este método con una de las constantes de orientación de NativeAdOptions (ORIENTATION_PORTRAIT, ORIENTATION_LANDSCAPE, ORIENTATION_ANY), se solicitan imágenes para una orientación concreta. Si no se llama a este método, se utiliza el valor predeterminado de ORIENTATION_LANDSCAPE.

setRequestMultipleImages()

Algunos recursos de imagen incluyen una serie de imágenes en vez de una sola. Al configurar este valor como "true", la aplicación indica que está preparada para mostrar todas las imágenes de cualquier recurso que tenga más de una. Al definirlo como "false" (valor predeterminado), la aplicación indica al SDK que proporcione solo la primera imagen de cualquier recurso que incluya una serie.

Si no se llama a withNativeAdOptions al crear un AdLoader, se utiliza el valor predeterminado de cada opción.

setAdChoicesPlacement()

De forma predeterminada, la superposición de Gestión de anuncios está configurada para aparecer en la esquina superior derecha. Para elegir la esquina que prefieras, asigna uno de los siguientes valores a esta propiedad:

  • ADCHOICES_TOP_LEFT
  • ADCHOICES_TOP_RIGHT
  • ADCHOICES_BOTTOM_RIGHT
  • ADCHOICES_BOTTOM_LEFT
setVideoOptions()

Las aplicaciones pueden usar este método para establecer las opciones de los recursos de vídeo devueltos como parte de un anuncio nativo. Para obtener más información, consulta más adelante la sección Vídeo nativo de esta guía.

Cargar anuncios

Cuando termines de crear un AdLoader, podrás usarlo para cargar anuncios. Hay dos métodos disponibles: loadAd() y loadAds().

Nota: Por el momento, el método loadAds() solo funciona con los anuncios de AdMob. Para los anuncios con mediación, usa loadAd() en su lugar.

El método loadAd() envía una solicitud para un solo anuncio:

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()
El método envía una solicitud para varios anuncios (hasta 5):

Java

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

Kotlin

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

Ambos métodos usan un objeto AdRequest como primer parámetro. Es la misma clase AdRequest que usan los anuncios de banner y los intersticiales. Puedes usar los métodos de la clase AdRequest para añadir información de segmentación, tal y como harías con otros formatos de anuncio.

loadAds() utiliza un parámetro más: el número de anuncios que debe intentar cargar el SDK para la solicitud. Este número está limitado a un máximo de cinco, aunque no se garantiza que el SDK devuelva el número exacto de anuncios solicitados. Si una llamada a loadAds() devuelve varios anuncios, serán diferentes entre sí.

Después de llamar a loadAd(), se hará una sola retrollamada a los métodos del agente de escucha descritos anteriormente para proporcionar el objeto de anuncio nativo o informar de un error.

Después de llamar a loadAds(), se harán varias retrollamadas (como mínimo una y sin superar el número de anuncios solicitados). Las aplicaciones que solicitan varios anuncios deben llamar a AdLoader.isLoading() al implementar las retrollamadas para determinar si ha finalizado el proceso de carga.

A continuación se muestra un ejemplo de cómo comprobar isLoading() en la retrollamada onAppInstallAdLoaded():

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd(new NativeAppInstallAd.OnAppInstallAdLoadedListener() {
    @Override
    public void onAppInstallAdLoaded(NativeAppInstallAd ad) {
        ...
        // some code that displays the app install 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")
    .forAppInstallAd {
        ...
        // some code that displays the app install 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)

Comprobar siempre las aplicaciones con anuncios de prueba

A la hora de crear y probar aplicaciones, utiliza siempre anuncios de prueba en vez de anuncios de producción activos. De lo contrario, podríamos suspender tu cuenta.

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

ca-app-pub-3940256099942544/2247696110

Lo hemos configurado especialmente para devolver los anuncios de prueba de cada solicitud, y puedes usarlo en tus propias aplicaciones para realizar la programación, las pruebas y la depuración. Solo tienes que sustituirlo por tu propio ID de bloque de anuncios antes de publicar la aplicación.

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

Cuándo solicitar anuncios

Las aplicaciones que muestran anuncios nativos pueden solicitarlos con antelación. En muchos casos, es la práctica recomendada. Por ejemplo, si la aplicación muestra una lista de elementos con anuncios nativos combinados, se pueden cargar anuncios nativos para toda la lista, ya que algunos solo se mostrarán cuando el usuario desplace la vista y otros ni siquiera llegarán a aparecer.

Mostrar un anuncio

Cuando se carga un anuncio nativo, el SDK invoca el agente de escucha del formato de anuncio correspondiente. Tu aplicación se encarga de mostrar el anuncio, aunque no es necesario que lo haga de inmediato. Para que sea más fácil mostrar formatos de anuncios definidos por el sistema, el SDK ofrece algunos recursos útiles, tal y como se indica a continuación.

Clases de vista de anuncio

Cada formato definido por el sistema tiene una clase de vista de anuncio correspondiente: NativeAppInstallAdView para los anuncios de descarga de aplicaciones y NativeContentAdView para los anuncios de contenido. Estas clases de vista de anuncio son elementos ViewGroup que los editores deben usar como raíz de los anuncios del formato correspondiente. Por ejemplo, un NativeContentAdView se correspondería con un único anuncio de contenido. Cada una de las vistas utilizadas para mostrar los recursos del anuncio (el elemento ImageView que muestra el recurso de captura de pantalla, por ejemplo) debe ser un elemento secundario del objeto NativeContentAdView.

La jerarquía de vistas de un anuncio de contenido que utiliza un LinearLayout para mostrar sus vistas de recursos debería tener un aspecto similar a este:

<com.google.android.gms.ads.formats.NativeContentAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:orientation="vertical"
    ... >
        <LinearLayout
        android:orientation="horizontal"
        ... >
          <TextView
            android:id="@+id/contentad_headline"
            ... />
         </LinearLayout>

         // Other assets such as image or media view, call to action, etc follow.
         ...
    </LinearLayout>
</com.google.android.gms.ads.formats.NativeContentAdView>

Este es un ejemplo de fragmento de código para crear un NativeContentAdView y rellenarlo con un NativeContentAd:

Java

AdLoader.Builder builder = new AdLoader.Builder(this, "<your ad unit ID>")
    .forContentAd(new NativeContentAd.OnContentAdLoadedListener() {
        @Override
        public void onContentAdLoaded(NativeContentAd nativeContentAd) {
            // Assumes you have a placeholder FrameLayout in your View layout
            // (with id fl_adplaceholder) where the ad is to be placed.
            FrameLayout frameLayout =
                findViewById(R.id.fl_adplaceholder);
            // Assumes that your ad layout is in a file call ad_unified.xml
            // in the res/layout folder
            NativeContentAdView adView = (NativeContentAdView) getLayoutInflater()
                .inflate(R.layout.ad_content, null);
            // This method sets the text, images and the native ad, etc into the ad
            // view.
            populateContentAdView(nativeContentAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }
    });

Kotlin

val builder = AdLoader.Builder(this, "<your ad unit ID>")
    .forContentAd { contentAd ->
        // Assumes that your ad layout is in a file call ad_content.xml
        // in the res/layout folder
        val adView = layoutInflater
                .inflate(R.layout.ad_content, null) as NativeContentAdView
        // This method sets the text, images and the native ad, etc into the ad
        // view.
        populateNativeContentAdView(contentAd, adView)
        // Assumes you have a placeholder FrameLayout in your View layout
        // (with id ad_frame) where the ad is to be placed.
        ad_frame.removeAllViews()
        ad_frame.addView(adView)
    }

Las clases de vista de anuncio también ofrecen métodos para registrar la vista usada para cada recurso individual y para registrar el propio objeto NativeAd. Al registrar las vistas de esta forma, el SDK puede gestionar automáticamente tareas como las siguientes:

  • Registrar clics.
  • Registrar impresiones (cuando se ve el primer píxel en la pantalla).
  • Mostrar la superposición de Gestión de anuncios

Superposición de Gestión de anuncios

El SDK añade una superposición de Gestión de anuncios a cada vista de anuncio nativo. Deja espacio en la esquina que prefieras de esta vista para incluir el logotipo de Gestión de anuncios, que se inserta automáticamente. También es importante que la superposición de Gestión de anuncios se vea fácilmente, por lo que te recomendamos que elijas los colores e imágenes de fondo más adecuados. Para obtener más información sobre el diseño y la función de la superposición, consulta el artículo Descripciones de los campos en anuncios nativos.

Indicación de anuncio

Debes mostrar una indicación de anuncio para dejar claro que se trata de publicidad. Consulta esta página para ver las directrices de la política.

Ejemplo de código

Sigue estos pasos para mostrar un formato de anuncio nativo definido por el sistema:

  1. Crea una instancia de la clase de vista de anuncio correcta.
  2. En cada recurso de anuncio que se vaya a mostrar:
    1. Rellena la vista de recurso con el recurso del objeto de anuncio.
    2. Registra la vista de recurso con la clase ViewGroup.
  3. Registra MediaView si el diseño de tu anuncio nativo incluye un recurso multimedia de gran tamaño.
  4. Registra el objeto del anuncio con la clase ViewGroup.

Esta es una función de ejemplo en la que se muestra un NativeAppInstallAd:

Java

private void displayAppInstallAd(ViewGroup parent, NativeAppInstallAd ad) {

    // Inflate a layout and add it to the parent ViewGroup.
    LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    NativeAppInstallAdView adView = (NativeAppInstallAdView) inflater
            .inflate(R.layout.my_ad_layout, parent);

    // Locate the view that will hold the headline, set its text, and call the
    // NativeAppInstallAdView's setHeadlineView method to register it.
    TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
    headlineView.setText(ad.getHeadline());
    adView.setHeadlineView(headlineView);

    ...
    // Repeat the above process for the other assets in the NativeAppInstallAd
    // using additional view objects (Buttons, ImageViews, etc).
    ...

    // If the app is using a MediaView, it should be
    // instantiated and passed to setMediaView. This view is a little different
    // in that the asset is populated automatically, so there's one less step.
    MediaView mediaView = (MediaView) adView.findViewById(R.id.ad_media);
    adView.setMediaView(mediaView);

    // Call the NativeAppInstallAdView's setNativeAd method to register the
    // NativeAdObject.
    adView.setNativeAd(ad);

    // Ensure that the parent view doesn't already contain an ad view.
    parent.removeAllViews();

    // Place the AdView into the parent.
    parent.addView(adView);
}

Kotlin

fun displayAppInstallAd(parent: ViewGroup, ad: NativeAppInstallAd) {

    // Inflate a layout and add it to the parent ViewGroup.
    val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
            as LayoutInflater
    val adView = inflater.inflate(R.layout.my_ad_layout, parent) as NativeAppInstallAdView

    // Locate the view that will hold the headline, set its text, and use the
    // NativeAppInstallAdView's headlineView property to register it.
    val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
    headlineView.text = ad.headline
    adView.headlineView = headlineView

    ...
    // Repeat the above process for the other assets in the NativeAppInstallAd using
    // additional view objects (Buttons, ImageViews, etc).
    ...

    // If the app is using a MediaView to display video, it should be instantiated
    // and assign to the mediaView property. This view is a little different in that
    // the asset is populated automatically, so there's one less step.
    val mediaView = adView.findViewById<MediaView>(R.id.ad_media)
    adView.mediaView = mediaView

    // Call the NativeAppInstallAdView's setNativeAd method to register the
    // NativeAdObject.
    adView.setNativeAd(ad)

    // Ensure that the parent view doesn't already contain an ad view.
    parent.removeAllViews()

    // Place the AdView into the parent.
    parent.addView(adView)
}

Echemos un vistazo a las tareas individuales:

Inflar el diseño

Java

LayoutInflater inflater = (LayoutInflater) parent.getContext()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
NativeAppInstallAdView adView = (NativeAppInstallAdView) inflater
        .inflate(R.layout.my_ad_layout, parent);

Kotlin

val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
        as LayoutInflater
val adView = inflater.inflate(R.layout.my_ad_layout, parent) as NativeAppInstallAdView
En este ejemplo, vamos a inflar un diseño XML que incluye vistas para mostrar un anuncio de descarga de aplicaciones y después localizaremos una referencia a NativeAppInstallAdView. También puedes reutilizar un NativeAppInstallAdView si ya hay alguno en tu fragmento o actividad, o incluso crear una instancia de forma dinámica sin utilizar un archivo de diseño.

Rellenar y registrar las vistas de recursos

Este código de ejemplo localiza la vista utilizada para mostrar el título, define su texto usando el recurso de cadena proporcionado por el objeto de anuncio y lo registra con el objeto NativeAppInstallAdView:

Java

TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
headlineView.setText(ad.getHeadline());
adView.setHeadlineView(headlineView);

Kotlin

val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
headlineView.text = ad.headline
adView.headlineView = headlineView

El proceso de localizar la vista, establecer su valor y registrarlo con la clase de vista de anuncio se debe repetir con cada uno de los recursos proporcionados por el objeto de anuncio nativo que vaya a mostrar la aplicación.

Gestión de clics

Este es un ejemplo de fragmento en el que se usa un agente de escucha de anuncios para controlar los eventos de clic:

Java

.withAdListener(new AdListener() {
    @Override onAdClicked() {
      // Log the click event or other custom behavior.
    }
})

Kotlin

.withAdListener(object : AdListener() {
    override fun onAdClicked() {
      // Log the click event or other custom behavior.
    }
})

Registrar el recurso MediaView

El recurso MediaView es un caso especial de View que se ha diseñado para mostrar el recurso multimedia principal. Se comporta de las siguientes formas:

  • Si el anuncio cargado tiene un recurso de vídeo, el vídeo se carga en búfer y empieza a reproducirse dentro de MediaView.
  • Si el anuncio cargado no cuenta con un recurso de vídeo, se descarga el primer recurso de imagen y se coloca dentro de MediaView.

MediaView es un elemento View que se puede definir en un diseño XML o construirse dinámicamente. Debe colocarse dentro de la jerarquía de vistas de un NativeAdView, como cualquier otra vista de recurso. Las aplicaciones que usan un MediaView no tienen que rellenarlo con un recurso, pero es necesario registrarlo con NativeAdView de esta forma:

Java

MediaView mediaView = adView.findViewById(R.id.ad_media);
adView.setMediaView(mediaView);

Kotlin

adView.mediaView = adView.findViewById(R.id.ad_media)

Registrar el objeto de anuncio nativo

Con este último paso se registra el objeto de anuncio nativo con la vista responsable de mostrarlo:

Java

adView.setNativeAd(ad);

Kotlin

adView.setNativeAd(ad)

Vídeo nativo

Además de imágenes, texto y números, algunos anuncios nativos contienen recursos de vídeo, aunque no son obligatorios y las aplicaciones no tienen por qué mostrarlos.

Para simplificar la configuración y visualización del vídeo, el SDK de anuncios para móviles ofrece las siguientes clases relacionadas con el vídeo:

VideoOptions

La clase VideoOptions permite a las aplicaciones configurar el comportamiento de los recursos de vídeo nativos. Los objetos VideoOptions deben asignarse a un objeto NativeAdOptions que se utiliza al construir el AdLoader:

Java

VideoOptions videoOptions = new VideoOptions.Builder()
        .setStartMuted(false)
        .build();

NativeAdOptions adOptions = new NativeAdOptions.Builder()
        .setVideoOptions(videoOptions)
        .build();

AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd( ... )
        .forContentAd( ... )
        .withNativeAdOptions(adOptions)
        .build();

Kotlin

val videoOptions = VideoOptions.Builder()
        .setStartMuted(false)
        .build()

val adOptions = NativeAdOptions.Builder()
        .setVideoOptions(videoOptions)
        .build()

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd( ... )
        .forContentAd( ... )
        .withNativeAdOptions(adOptions)
        .build()

En la actualidad, la clase VideoOptions.Builder ofrece el método setStartMuted(), que indica al SDK si los recursos de vídeo deben comenzar silenciados o no. El valor predeterminado es true.

VideoController

La clase VideoController se utiliza para obtener información sobre los recursos de vídeo. Las aplicaciones pueden obtener una referencia del controlador de un NativeAppInstallAd llamando al método getVideoController():

Java

VideoController vc = myNativeAd.getVideoController();

Kotlin

val vc = myNativeAd.videoController

Este método siempre devuelve un objeto VideoController, aunque el anuncio no incluya ningún recurso de vídeo.

VideoController ofrece estos métodos para consultar el estado del vídeo:

  • hasVideoContent(): devuelve "true" si el anuncio tiene un recurso de vídeo y "false" si no lo tiene.
  • getAspectRatio(): devuelve la relación de aspecto del vídeo (ancho/alto), o cero si no hay ningún recurso de vídeo.

Las aplicaciones también pueden usar la clase VideoController.VideoLifecycleCallbacks para recibir notificaciones cuando se producen eventos en el ciclo de vida de un recurso de vídeo:

Java

VideoController vc = nativeAd.getVideoController();

vc.setVideoLifecycleCallbacks(new VideoController.VideoLifecycleCallbacks() {
    public void onVideoEnd() {
        // Here apps can take action knowing video playback is finished.
        // It's always a good idea to wait for playback to complete before
        // replacing or refreshing a native ad, for example.
        super.onVideoEnd();
    }
});

Kotlin

val vc = nativeAd.videoController

vc.setVideoLifecycleCallbacks(object : VideoController.VideoLifecycleCallbacks() {
    override fun onVideoEnd() {
        // Here apps can take action knowing video playback is finished.
        // It's always a good idea to wait for playback to complete before
        // replacing or refreshing a native ad, for example.
        super.onVideoEnd()
    }
})

Destruir un anuncio

Cuando termines de mostrar tu anuncio nativo, debes destruirlo de forma adecuada.

Java

nativeAd.destroy();

Kotlin

nativeAd.destroy()

Otros recursos

Muestras de GitHub

  • Aplicación de muestra de anuncios nativos avanzados: Java | Kotlin

Laboratorio de programación

Pasos siguientes