Anuncios nativos avanzados (unificados)

Los anuncios nativos son recursos publicitarios que se presentan a los usuarios a través de componentes de la interfaz de usuario que son nativos de la plataforma. Se muestran mediante las mismas clases que ya utilizas en tus storyboards y se les puede aplicar formato para que se ajusten al diseño visual de tu aplicación. Cuando se carga un anuncio, la aplicación recibe un objeto que contiene sus recursos, y la aplicación (en vez del SDK) es responsable de mostrarlos.

En esta guía aprenderás a usar el SDK de anuncios de Google para móviles para implementar anuncios nativos en una aplicación para iOS, y descubrirás algunos aspectos importantes que deberás tener en cuenta durante el proceso.

Requisitos previos

En esta guía se presuponen ciertos conocimientos sobre el funcionamiento del SDK de anuncios de Google para móviles, por lo que te recomendamos consultar nuestra guía de introducción, si no lo has hecho ya.

Comprobar siempre las aplicaciones con anuncios de prueba

Antes de comenzar, recuerda que, al crear y probar tus aplicaciones, debes utilizar siempre anuncios de prueba en lugar de anuncios de producción activos. Si haces pruebas con anuncios de producción, podríamos suspender tu cuenta.

Para cargar anuncios de prueba, lo más sencillo es usar nuestro ID de bloque de anuncios para todos los anuncios nativos avanzados en iOS:

ca-app-pub-3940256099942544/3986624511

Lo hemos configurado especialmente para que devuelva anuncios de prueba a cada solicitud, y puedes usarlo en tus aplicaciones para la codificació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.

Cargar anuncios

Los anuncios nativos están disponibles en dos formatos definidos por el sistema: contenido y descarga de aplicaciones.

Ambos tipos de anuncios se representan con una clase: GADUnifiedNativeAd. Una instancia de esta clase contiene los recursos para el anuncio nativo. En función de cuál sea el tipo de anuncio representado por GADUnifiedNativeAd, algunos campos no se rellenarán (es decir, su valor será nil).

Los anuncios nativos se cargan mediante objetos GADAdLoader, que envían mensajes a sus delegados según el protocolo GADAdLoaderDelegate.

Inicializar el cargador de anuncios

Para cargar un anuncio es necesario inicializar el cargador de anuncios. En el siguiente código puedes ver cómo se inicializa un elemento GADAdLoader:

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ kGADAdLoaderAdTypeUnifiedNative ],
    options: [ ... ad loader options objects ... ])
adLoader.delegate = self

Objective‑C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];
self.adLoader.delegate = self;

Necesitarás un ID de bloque de anuncios (puedes usar el ID de prueba), constantes que transferir a la matriz adTypes para especificar qué formatos nativos quieres solicitar y cualquier opción que quieras definir en el parámetro options. Encontrarás la lista de posibles valores para el parámetro options más adelante, en la sección Configurar las opciones de anuncios nativos.

La matriz adTypes debe incluir la siguiente constante:

Implementar el delegado del cargador de anuncios

El delegado del cargador de anuncios debe implementar protocolos específicos para tu tipo de anuncio. Para losunified anuncios nativos, se usaría lo siguiente:

  • GADUnifiedNativeAdLoaderDelegate: este protocolo incluye un mensaje que se envía al delegado cuando se carga un anuncio nativo unificado:

    Swift

    public func adLoader(_ adLoader: GADAdLoader,
        didReceive nativeAd: GADUnifiedNativeAd)
    

    Objective‑C

    - (void)adLoader:(GADAdLoader *)adLoader
        didReceiveNativeAd:(GADUnifiedNativeAd *)nativeAd;
    

Solicitar anuncios

Después de inicializar GADAdLoader, haz una llamada al método loadRequest: para solicitar un anuncio:

Swift

adLoader.load(GADRequest())

Objective‑C

[self.adLoader loadRequest:[GADRequest request]];

El método loadRequest: de GADAdLoader acepta los mismos objetos GADRequest como banners e intersticiales. Puedes utilizar objetos de solicitud para añadir información sobre la segmentación, tal como harías con otros tipos de anuncios.

Cuándo se deben solicitar anuncios

Las aplicaciones que muestran anuncios nativos pueden solicitarlos antes de que se vayan a mostrar (es decir, pueden hacerlo con antelación). En muchos casos, es la práctica recomendada. Si, por ejemplo, una 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 se desplace por la vista y otros ni siquiera llegarán a aparecer.

Aunque precargar anuncios es una buena técnica, si hay anuncios antiguos que llevan sin mostrarse demasiado tiempo, lo ideal es retirarlos. Si pasa más de una hora y aún no se han mostrado objetos de anuncio nativos concretos, descártalos y sustitúyelos por anuncios nuevos mediante otra solicitud.

Determinar cuándo ha finalizado la carga

Después de que una aplicación realice una llamada a loadRequest:, podrá obtener los resultados de la solicitud mediante llamadas a:

Una solicitud de un solo anuncio dará lugar a una llamada a uno de estos métodos.

Una solicitud de varios anuncios dará lugar a, al menos, una retrollamada a los métodos anteriores, pero no más del número máximo de anuncios solicitados.

Además, GADAdLoaderDelegate ofrece la retrollamada adLoaderDidFinishLoading. Este método de delegación indica que un cargador de anuncios ha terminado de cargar anuncios y la solicitud no devolverá más anuncios ni errores. Aquí tienes un ejemplo de cómo puedes usarlo para cargar varios anuncios nativos personalizados a la vez:

Swift

class ViewController: UIViewController, GADUnifiedNativeAdLoaderDelegate {

  var adLoader: GADAdLoader!

  override func viewDidLoad() {
    super.viewDidLoad()

    let multipleAdsOptions = GADMultipleAdsAdLoaderOptions()
    multipleAdsOptions.numberOfAds = 5

    adLoader = GADAdLoader(adUnitID: YOUR_AD_UNIT_ID, rootViewController: self,
        adTypes: [GADAdLoaderAdType.unifiedNative],
        options: [multipleAdsOptions])
    adLoader.delegate = self
    adLoader.load(GADRequest())
  }
 
  func adLoader(_ adLoader: GADAdLoader,
                didReceive nativeAd: GADUnifiedNativeAd) {
    // A unified native ad has loaded, and can be displayed.
  }
 
  func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) {
      // The adLoader has finished loading ads, and a new request can be sent.
  }

}

Objective‑C

@interface ViewController () <GADUnifiedNativeAdLoaderDelegate, GADVideoControllerDelegate>
@property(nonatomic, strong) GADAdLoader *adLoader;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  GADMultipleAdsAdLoaderOptions *multipleAdsOptions =
      [[GADMultipleAdsAdLoaderOptions alloc] init];
  multipleAdsOptions.numberOfAds = 5;

  self.adLoader = [[GADAdLoader alloc] initWithAdUnitID:YOUR_AD_UNIT_ID
          rootViewController:self
                     adTypes:@[kGADAdLoaderAdTypeUnifiedNative]
                     options:@[multipleAdsOptions]];
  self.adLoader.delegate = self;
  [self.adLoader loadRequest:[GADRequest request]];
}

 
- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
   // A unified native ad has loaded, and can be displayed.
}
 
- (void)adLoaderDidFinishLoading:(GADAdLoader *) adLoader {
  // The adLoader has finished loading ads, and a new request can be sent.
}

@end

Gestionar solicitudes fallidas

Los protocolos anteriores amplían el protocolo GADAdLoaderDelegate, que define el mensaje que se envía cuando no se pueden cargar los anuncios. Puedes usar el objeto GADRequestError para determinar la causa del error.

Swift

public func adLoader(_ adLoader: GADAdLoader,
    didFailToReceiveAdWithError error: GADRequestError)

Objective‑C

- (void)adLoader:(GADAdLoader *)adLoader
    didFailToReceiveAdWithError:(GADRequestError *)error;

Recibir notificaciones de eventos de anuncios nativos

Para recibir notificaciones de eventos relacionados con las interacciones de anuncios nativos, define la propiedad de delegado del anuncio nativo:

Swift

nativeAd.delegate = self

Objective‑C

nativeAd.delegate = self;

Luego, implementa GADUnifiedNativeAdDelegate para recibir las siguientes llamadas de delegados:

Swift

func nativeAdDidRecordImpression(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was shown.
}

func nativeAdDidRecordClick(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad was clicked on.
}

func nativeAdWillPresentScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will present a full screen view.
}

func nativeAdWillDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will dismiss a full screen view.
}

func nativeAdDidDismissScreen(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad did dismiss a full screen view.
}

func nativeAdWillLeaveApplication(_ nativeAd: GADUnifiedNativeAd) {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

Objective‑C

- (void)nativeAdDidRecordImpression:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was shown.
}

- (void)nativeAdDidRecordClick:(GADUnifiedNativeAd *)nativeAd {
  // The native ad was clicked on.
}

- (void)nativeAdWillPresentScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will present a full screen view.
}

- (void)nativeAdWillDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will dismiss a full screen view.
}

- (void)nativeAdDidDismissScreen:(GADUnifiedNativeAd *)nativeAd {
  // The native ad did dismiss a full screen view.
}

- (void)nativeAdWillLeaveApplication:(GADUnifiedNativeAd *)nativeAd {
  // The native ad will cause the application to become inactive and
  // open a new application.
}

Opciones de anuncios nativos

El último parámetro incluido en la creación del objeto GADAdLoader anterior es una matriz opcional de objetos.

Swift

adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ ... ad type constants ... ],
    options: [ ... ad loader options objects ... ])

Objective‑C

self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:rootViewController
               adTypes:@[ ... ad type constants ... ]
               options:@[ ... ad loader options objects ... ]];

Esta matriz opcional contiene una o varias instancias de una subclase GADAdLoaderOptions (GADNativeAdImageAdLoaderOptions), que son objetos que puede usar una aplicación para indicar sus preferencias sobre cómo deben cargarse y comportarse los anuncios nativos.

GADNativeAdImageAdLoaderOptions contiene propiedades relacionadas con las imágenes de los anuncios nativos avanzados. Las aplicaciones pueden controlar cómo gestiona GADAdLoader los recursos de imagen avanzados de los anuncios nativos. Para ello, crea objetos GADNativeAdImageAdLoaderOptions, define sus propiedades (disableImageLoading, preferredImageOrientation y shouldRequestMultipleImages) y los transfiere durante la inicialización.

GADNativeAdImageAdLoaderOptions tiene las siguientes propiedades:

disableImageLoading
Los recursos de imagen de los anuncios nativos se devuelven mediante instancias de GADNativeAdImage, que contienen las propiedades image e imageURL. Si disableImageLoading se define como false, que es el valor predeterminado (o NO en el caso de Objective‑C), el SDK obtendrá los recursos de imagen y rellenará las propiedades image y imageURL automáticamente. Si se define como true (o YES en Objective‑C), el SDK solo rellenará imageURL y podrás descargar las imágenes como mejor te convenga.
preferredImageOrientation

Algunas creatividades tienen varias imágenes, para adaptarse a las distintas orientaciones de los dispositivos. Las aplicaciones pueden solicitar imágenes para una orientación concreta, definiendo esta propiedad como una de las constantes de orientación:

  • GADNativeAdImageAdLoaderOptionsOrientationAny
  • GADNativeAdImageAdLoaderOptionsOrientationLandscape
  • GADNativeAdImageAdLoaderOptionsOrientationPortrait

    Si usas preferredImageOrientation para especificar una preferencia de orientación de imagen vertical u horizontal, el SDK situará en primer lugar las imágenes con esa orientación en las matrices de recursos de imagen y, a continuación, las que no coincidan. Asegúrate de que tus aplicaciones puedan reconocer imágenes tanto en horizontal como en vertical, ya que algunos anuncios solo disponen de una orientación.

    Si no se realiza ninguna llamada a este método, se usará el valor predeterminado GADNativeAdImageAdLoaderOptionsOrientationAny.

shouldRequestMultipleImages

Algunos recursos de imagen incluyen una serie de imágenes, no solo una. Si defines este valor como "true", la aplicación indicará que está preparada para mostrar todas las imágenes de cualquier recurso que tenga más de una. Si se define como "false" (valor predeterminado), la aplicación indicará al SDK que proporcione solo la primera imagen de cualquier recurso que incluya una serie.

Si no se transfiere ningún objeto GADAdLoaderOptions al inicializar GADAdLoader, se usará el valor predeterminado de cada opción.

GADNativeAdViewOptions

Los objetos GADNativeAdViewAdOptions se utilizan para indicar las preferencias sobre cómo deben representar los anuncios las vistas de anuncios nativos. Tienen una sola propiedad, preferredAdChoicesPosition, que se puede usar para especificar la ubicación en la que debe estar situado el icono de Gestión de anuncios. Dicho icono puede aparecer en cualquier esquina del anuncio y su valor predeterminado es GADAdChoicesPositionTopRightCorner. Los posibles valores de esta propiedad son los siguientes:

  • GADAdChoicesPositionTopRightCorner
  • GADAdChoicesPositionTopLeftCorner
  • GADAdChoicesPositionBottomRightCorner
  • GADAdChoicesPositionBottomLeftCorner

Aquí tienes un ejemplo de cómo puedes situar el icono de Gestión de anuncios en la esquina superior izquierda de un anuncio:

Swift

let adViewOptions = GADNativeAdViewAdOptions()
adViewOptions.preferredAdChoicesPosition = .topLeftCorner
adLoader = GADAdLoader(adUnitID: "ca-app-pub-3940256099942544/3986624511",
    rootViewController: self,
    adTypes: [ ... ad type constants ... ],
    options: [ ... ad loader options objects ... ])

Objective‑C

GADNativeAdViewAdOptions *adViewOptions = [[GADNativeAdViewAdOptions alloc] init];
adViewOptions.preferredAdChoicesPosition = GADAdChoicesPositionTopLeftCorner;
self.adLoader = [[GADAdLoader alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/3986624511"
    rootViewController:self
               adTypes:@[ ... ad type constants ...  ]
               options:@[ ... ad loader options objects ... ]];

GADVideoOptions

Los objetos GADVideoOptions se utilizan para indicar cómo deben mostrarse los recursos de vídeo nativos. Cuentan con una única propiedad, startMuted.

Este valor booleano indica si los recursos de vídeo deben empezar a reproducirse silenciados. El valor predeterminado es true.

GADMultipleAdsAdLoaderOptions

Los objetos GADMultipleAdsAdLoaderOptions permiten a los editores indicar a un cargador de anuncios que cargue varios anuncios con una única solicitud. Los anuncios cargados de esta forma serán forzosamente únicos. GADMultipleAdsAdLoaderOptions tiene una propiedad única, numberOfAds, que representa el número de anuncios que el cargador debe intentar devolver tras recibir la solicitud. El valor predeterminado es uno y está limitado a un máximo de cinco (aunque una aplicación solicite más, solo se devolverán cinco a lo sumo). El número real de anuncios devueltos no está garantizado, pero oscilará entre cero y numberOfAds.

Ver formatos de anuncios nativos definidos por el sistema

Cuando se cargue un anuncio nativo, tu aplicación recibirá un objeto de anuncio nativo mediante uno de los mensajes de protocolo GADAdLoaderDelegate. 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.

GADUnifiedNativeAdView

Hay una clase de vista de anuncio para GADUnifiedNativeAd, GADUnifiedNativeAdView. Se trata de un elemento UIView que los editores deben usar para mostrar anuncios. Una sola clase GADUnifiedNativeAdView, por ejemplo, puede mostrar una única instancia de un objeto GADUnifiedNativeAd. Todos los objetos UIView empleados para mostrar los recursos del anuncio deben ser vistas secundarias de GADUnifiedNativeAdView.

Por ejemplo, si muestras un anuncio en un objeto UITableView, la jerarquía de vistas de una de las celdas podría ser similar a esta:

La clase GADUnifiedNativeAdView también proporciona IBOutlets, que se usa para registrar la vista empleada para cada recurso individual, y un método para registrar el propio objeto GADUnifiedNativeAd. 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.

La superposición de Gestión de anuncios

En los anuncios nativos indirectos (publicados a través del backfill AdMob, de Ad Exchange o de AdSense), el SDK añade una superposición de Gestión de anuncios. Reserva espacio en la esquina que prefieras de la vista de anuncios nativos para el logotipo de Gestión de anuncios, que se inserta automáticamente. Asegúrate también de que el contenido en el que se coloque dicha superposición permita que se vea el icono fácilmente. Para obtener más información sobre el diseño y la función de la superposición, consulta las directrices de implementación de anuncios nativos programáticos.

Indicación de anuncios

Si muestras anuncios nativos programáticos, debes incluir una indicación de anuncio para dejar claro que se trata de publicidad.

Ejemplo de código

Veamos cómo mostrar anuncios nativos mediante vistas cargadas dinámicamente a partir de archivos xib. Puede ser una estrategia muy útil si se configuran objetos GADAdLoaders para solicitar varios formatos.

Diseño de los objetos UIViews

El primer paso es distribuir los objetos UIViews que mostrarán los recursos de anuncios nativos. Puedes hacerlo en Interface Builder, tal como harías para crear cualquier otro archivo xib. Este es el aspecto que tendría el diseño de un anuncio nativo:

Fíjate en el valor de clase personalizada que se encuentra en la esquina superior derecha de la imagen. El valor es GADUnifiedNativeAdView. Esta es la clase de vista de anuncio que se usa para mostrar los objetos GADUnifiedNativeAd.

También debes configurar una clase personalizada para el objeto GADMediaView, que se utiliza para mostrar el vídeo o la imagen del anuncio.

Vincular salidas a vistas

Cuando las vistas estén configuradas y hayas asignado las clases de vista de anuncio correctas al diseño, vincula las salidas de los recursos de vistas de anuncio a los objetos UIViews que hayas creado. Este es el procedimiento que debes seguir para vincular las salidas de los recursos de la vista de anuncio al objeto UIViews creado para un anuncio: En el panel de salida, las salidas de GADUnifiedNativeAdView se han vinculado a objeto UIViews configurado en Interface Builder. Así, el SDK sabe qué UIView muestra cada recurso. También es importante recordar que estas salidas representan las vistas en las que se puede hacer clic en el anuncio.

Presentación de anuncios

Una vez completado el diseño y vinculadas las salidas, el último paso es añadir código a la aplicación para mostrar un anuncio después de cargarlo. El siguiente método permite mostrar un anuncio en la vista definida anteriormente:

Swift

// Mark: - GADUnifiedNativeAdLoaderDelegate
func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd: GADUnifiedNativeAd) {
  print("Received unified native ad: \(nativeAd)")
  refreshAdButton.isEnabled = true
  // Create and place ad in view hierarchy.
  let nibView = Bundle.main.loadNibNamed("UnifiedNativeAdView", owner: nil, options: nil)?.first
  guard let nativeAdView = nibView as? GADUnifiedNativeAdView else {
    return
  }
  setAdView(nativeAdView)

  // Associate the native ad view with the native ad object. This is
  // required to make the ad clickable as well as populate the media view.
  nativeAdView.nativeAd = nativeAd

  // Populate the native ad view with the native ad assets.
  // The headline is guaranteed to be present in every native ad.
  (nativeAdView.headlineView as? UILabel)?.text = nativeAd.headline

  // These assets are not guaranteed to be present. Check that they are before
  // showing or hiding them.
  (nativeAdView.bodyView as? UILabel)?.text = nativeAd.body
  nativeAdView.bodyView?.isHidden = nativeAd.body == nil

  (nativeAdView.callToActionView as? UIButton)?.setTitle(nativeAd.callToAction, for: .normal)
  nativeAdView.callToActionView?.isHidden = nativeAd.callToAction == nil

  (nativeAdView.iconView as? UIImageView)?.image = nativeAd.icon?.image
  nativeAdView.iconView?.isHidden = nativeAd.icon == nil

  (nativeAdView.starRatingView as? UIImageView)?.image = imageOfStars(fromStarRating:nativeAd.starRating)
  nativeAdView.starRatingView?.isHidden = nativeAd.starRating == nil

  (nativeAdView.storeView as? UILabel)?.text = nativeAd.store
  nativeAdView.storeView?.isHidden = nativeAd.store == nil

  (nativeAdView.priceView as? UILabel)?.text = nativeAd.price
  nativeAdView.priceView?.isHidden = nativeAd.price == nil

  (nativeAdView.advertiserView as? UILabel)?.text = nativeAd.advertiser
  nativeAdView.advertiserView?.isHidden = nativeAd.advertiser == nil

  // In order for the SDK to process touch events properly, user interaction
  // should be disabled.
  nativeAdView.callToActionView?.isUserInteractionEnabled = false
}

Objective‑C

#pragma mark GADUnifiedNativeAdLoaderDelegate implementation

- (void)adLoader:(GADAdLoader *)adLoader didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd {
  NSLog(@"Received unified native ad: %@", nativeAd);
  self.refreshButton.enabled = YES;

  // Create and place ad in view hierarchy.
  GADUnifiedNativeAdView *nativeAdView =
      [[NSBundle mainBundle] loadNibNamed:@"UnifiedNativeAdView" owner:nil options:nil].firstObject;
  [self setAdView:nativeAdView];

  // Associate the native ad view with the native ad object. This is
  // required to make the ad clickable as well as populate the media view.
  nativeAdView.nativeAd = nativeAd;

  // Populate the native ad view with the native ad assets.
  // The headline is guaranteed to be present in every native ad.
  ((UILabel *)nativeAdView.headlineView).text = nativeAd.headline;

  // These assets are not guaranteed to be present. Check that they are before
  // showing or hiding them.
  ((UILabel *)nativeAdView.bodyView).text = nativeAd.body;
  nativeAdView.bodyView.hidden = nativeAd.body ? NO : YES;

  [((UIButton *)nativeAdView.callToActionView)setTitle:nativeAd.callToAction
                                              forState:UIControlStateNormal];
  nativeAdView.callToActionView.hidden = nativeAd.callToAction ? NO : YES;

    ((UIImageView *)nativeAdView.iconView).image = nativeAd.icon.image;
  nativeAdView.iconView.hidden = nativeAd.icon ? NO : YES;

  ((UIImageView *)nativeAdView.starRatingView).image = [self imageForStars:nativeAd.starRating];
  nativeAdView.starRatingView.hidden = nativeAd.starRating ? NO : YES;

  ((UILabel *)nativeAdView.storeView).text = nativeAd.store;
  nativeAdView.storeView.hidden = nativeAd.store ? NO : YES;

  ((UILabel *)nativeAdView.priceView).text = nativeAd.price;
  nativeAdView.priceView.hidden = nativeAd.price ? NO : YES;

  ((UILabel *)nativeAdView.advertiserView).text = nativeAd.advertiser;
  nativeAdView.advertiserView.hidden = nativeAd.advertiser ? NO : YES;

  // In order for the SDK to process touch events properly, user interaction
  // should be disabled.
  nativeAdView.callToActionView.userInteractionEnabled = NO;
}

GADMediaView

Los recursos de imagen y de vídeo se muestran a los usuarios a través de GADMediaView. Se trata de un objeto UIView que se puede definir en un archivo xib o se puede crear de forma dinámica. Debe colocarse dentro de la jerarquía de vistas de un objeto GADNativeAdView, igual que cualquier otra vista de recursos.

Sin embargo, a diferencia de otras vistas de recursos, no es necesario que las aplicaciones rellenen manualmente los objetos GADMediaView con sus recursos. El SDK los gestiona automáticamente después de definir las propiedades nativeAd :

  • Si hay un recurso de vídeo disponible, se carga en el búfer y empieza a reproducirse dentro de GADMediaView.
  • Si el anuncio no contiene un recurso de vídeo, se descarga el primer recurso de imagen y se sitúa dentro de GADMediaView.

    Este es un fragmento del ejemplo de anuncio nativo avanzado: (Swift | Objective‑C) que muestra cómo rellenar el objeto GADMediaView con los recursos de anuncios nativos asociando el anuncio nativo a la vista de anuncio nativo:

Swift

nativeAdView.nativeAd = nativeAd

Objective‑C

nativeAdView.nativeAd = nativeAd;

Asegúrate de que en el archivo de Interface Builder para la vista de anuncios nativos has definido la clase de vistas personalizadas como GADMediaView y la has conectado a la salida mediaView.

Vídeo nativo

Además de imágenes, texto y cifras, algunos anuncios nativos contienen recursos de vídeo. No todos los anuncios los tienen y no es obligatorio que las aplicaciones muestren los vídeos incluidos en los anuncios.

GADVideoController

La clase GADVideoController se utiliza para obtener información acerca de los recursos de vídeo. GADUnifiedNativeAd ofrece una propiedad videoController que expone la clase GADVideoController de cada anuncio:

Swift

let videoController = myUnifiedNativeAd.videoController

Objective‑C

GADVideoController *videoController = myUnifiedNativeAd.videoController

Esta propiedad nunca es nil, aunque el anuncio no contenga un recurso de vídeo.

GADVideoController ofrece los siguientes métodos para consultar el estado de los vídeos:

  • hasVideoContent: "true" si el anuncio incluye un recurso de vídeo, "false" en caso contrario.
  • aspectRatio: relación de aspecto del vídeo (ancho/alto) o 0 (cero) si no hay ningún recurso de vídeo.

Las aplicaciones también pueden definir GADVideoControllerDelegate para que la clase GADVideoController reciba notificaciones de eventos durante el ciclo de vida de los recursos de vídeo. GADVideoControllerDelegate ofrece un único mensaje opcional, videoControllerDidEndVideoPlayback, que se envía cuando un vídeo termina de reproducirse.

Aquí tienes un ejemplo de GADVideoControllerDelegate en acción:

Swift

class ViewController: UIViewController, GADUnifiedNativeAdLoaderDelegate,
    GADVideoControllerDelegate {

  func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd:
                GADUnifiedNativeAd) {
    ...
    nativeAd.videoController.delegate = self
    ...
  }

  ...
  func videoControllerDidEndVideoPlayback(_ videoController: Any!) {
    // Here apps can take action knowing video playback is finished.
    // This is handy for things like unmuting audio, and so on.
  }
}

Objective‑C

@interface ViewController () <GADUnifiedNativeAdLoaderDelegate,
        GADVideoControllerDelegate>

- (void)adLoader:(GADAdLoader *)adLoader
    didReceiveNativeAd:(GADUnifiedNativeAd) *)nativeAd {
  ...
  nativeAd.videoController.delegate = self;
  ...
}

...

- (void)videoControllerDidEndVideoPlayback:(GADVideoController *)videoController {
  // Here apps can take action knowing video playback is finished.
  // This is handy for things like unmuting audio, and so on.
}

@end

Otros recursos

Ejemplos

Laboratorio de programación

Pasos siguientes

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.