Ir al contenido

Nativo

Los anuncios nativos son un tipo de anuncio que puede ser mostrado con el mismo estilo visual del resto de la app, lo que permite una integración natural y no-intrusiva con la interfaz de usuario.

A diferencia del resto de formatos, la app proporciona el layout y el SDK lo rellena con los recursos del anuncio, sea cual sea la fuente de demanda que lo haya servido.

El primer paso es crear la vista que se utilizará para mostrar los anuncios. Debe ser un WANativeAdView, o una subclase de él, donde cada recurso que la app quiera mostrar esté conectado al outlet correspondiente.

La forma más sencilla es crear un fichero XIB, asignar WANativeAdView como clase de su vista raíz y conectar los outlets desde el Interface Builder:

OutletTipoDescripción
advertiserLabelUILabelNombre del anunciante
bodyLabelUILabelDescripción del anuncio
callToActionButtonUIButtonBotón que invita al usuario a interactuar
headlineLabelUILabelTitular del anuncio
iconImageViewUIImageViewIcono del anuncio
mediaContainerUIViewContenedor para el contenido multimedia (imagen o vídeo)
optionsContainerUIViewContenedor para la vista de opciones del anuncio
priceLabelUILabelPrecio del producto promocionado
ratingContainerUIViewContenedor para la valoración del producto promocionado
storeLabelUILabelTienda del producto promocionado

Todos los outlets son opcionales, por lo que solo es necesario conectar los recursos que muestre el diseño.

Para solicitar un anuncio nativo, es necesario realizar una integración por código tal y como se muestra en el ejemplo a continuación:

import UIKit
import WortiseSDK
class ViewController: UIViewController {
private var nativeAd: WANativeAd?
private var nativeAdLoader: WANativeAdLoader?
private var nativeAdView: WANativeAdView?
override func viewDidLoad() {
super.viewDidLoad()
...
let loader = WANativeAdLoader(
adUnitId: "Ad Unit ID de Wortise", delegate: self
)
loader.rootViewController = self
nativeAdLoader = loader
loader.loadAd()
}
deinit {
nativeAd?.destroy()
nativeAdLoader?.destroy()
}
}
extension ViewController: WANativeDelegate {
func didLoad(nativeAd: WANativeAd) {
// Invocado cuando el anuncio ha sido cargado
self.nativeAd?.destroy()
self.nativeAd = nativeAd
// Instanciamos la vista del anuncio y la añadimos a la interfaz
let adView = Bundle.main.loadNibNamed(
"NativeAdView", owner: nil
)?.first as! WANativeAdView
view.addSubview(adView)
nativeAdView = adView
nativeAdLoader?.render(ad: nativeAd, into: adView)
}
func didClick(nativeAd: WANativeAd) {
// Invocado cuando el anuncio ha sido clicado
}
func didFailToLoad(nativeAd error: WAAdError) {
// Invocado cuando el anuncio no ha podido cargarse
// (por un error o por falta de inventario)
}
func didImpress(nativeAd: WANativeAd) {
// Invocado cuando el anuncio ha generado una impresión
}
func didPayRevenue(nativeAd: WANativeAd, data: WARevenueData) {
// Invocado cuando el anuncio ha generado ingresos
}
}

El método render(ad:into:) rellena los outlets de la vista con los recursos del anuncio y los registra para poder trackear los clicks y las impresiones. Devuelve false cuando el anuncio no ha podido mostrarse.

La clase WANativeAd expone los recursos del anuncio, que se pueden utilizar para personalizar la vista antes de mostrarla:

PropiedadTipoDescripción
advertiserString?Nombre del anunciante
bodyString?Descripción del anuncio
callToActionString?Texto de la llamada a la acción
headlineString?Titular del anuncio
iconImage?Icono del anuncio
images[Image]Imágenes del anuncio
mediaContentMediaContent?Contenido multimedia del anuncio (imagen o vídeo)
priceString?Precio del producto promocionado
ratingDouble?Valoración del producto promocionado
storeString?Tienda del producto promocionado

El método loadAd también acepta una instancia de WARequestParameters, igual que el resto de formatos:

nativeAdLoader?.loadAd(parameters: WARequestParameters(agent: "your agent"))

Si la app ya integraba la clase obsoleta WAGoogleNativeAd, estas son las equivalencias con la nueva integración:

ObsoletoSustituto
WAGoogleNativeAd(adUnitId:delegate:)WANativeAdLoader(adUnitId:delegate:)
WAGoogleNativeDelegateWANativeDelegate
load()loadAd() (o loadAd(parameters:))
didLoad(nativeAd:googleNativeAd:)didLoad(nativeAd:) — un WANativeAd, sin tipos de Google
didFailToLoad(nativeAd:error:)didFailToLoad(nativeAd:)
didRecord(impression:)didImpress(nativeAd:)
options ([GADAdLoaderOptions])eliminado — el SDK configura la petición
Tu propio GADNativeAdView y sus recursosOutlets de WANativeAdView + render(ad:into:)

En la práctica, los cambios son:

  1. Eliminar los tipos de Google. Ya no se recibe ningún NativeAd de Google en los callbacks, por lo que la app deja de importar GoogleMobileAds para los anuncios nativos.
  2. Cambiar la clase de la vista. La vista raíz del layout pasa a ser un WANativeAdView, conectando los outlets de la sección Vista del anuncio en lugar de las vistas de recursos de Google.
  3. Mostrar el anuncio a través del loader. Donde la app configuraba un GADNativeAdView en el callback de carga, ahora se llama a render(ad:into:).
  4. Vista multimedia. Hay que eliminar el GADMediaView del layout y conectar una UIView normal como mediaContainer; el SDK insertará la vista multimedia correcta según la red que haya servido el anuncio.
func didLoad(nativeAd: WAGoogleNativeAd, googleNativeAd: NativeAd) {
let adView = // tu GADNativeAdView
adView.headlineView = headlineLabel
adView.callToActionView = callToActionButton
adView.mediaView = mediaView
// ... una línea por recurso ...
adView.nativeAd = googleNativeAd
}
func didLoad(nativeAd: WANativeAd) {
nativeAdLoader?.render(ad: nativeAd, into: adView)
}

Las apps que sigan utilizando WAGoogleNativeAd reciben la instancia de NativeAd de Google en el callback didLoad(nativeAd:googleNativeAd:), y son las responsables de construir el GADNativeAdView y de registrar cada recurso, tal y como se describe en la documentación de Google.