Pular para o conteúdo

Nativo

Os anúncios nativos são um tipo de anúncio que pode ser exibido com o mesmo estilo visual do restante do app, o que permite uma integração natural e não intrusiva com a interface do usuário.

Diferentemente dos outros formatos, o app fornece o layout e o SDK o preenche com os assets do anúncio, independentemente de qual fonte de demanda o tenha preenchido.

O primeiro passo é criar a view que será usada para exibir os anúncios. Ela precisa ser uma WANativeAdView, ou uma subclasse dela, em que cada asset que o app deseja exibir é conectado ao outlet correspondente.

A forma mais fácil é criar um arquivo XIB, definir WANativeAdView como a classe da sua view raiz e conectar os outlets a partir do Interface Builder:

OutletTipoDescrição
advertiserLabelUILabelNome do anunciante
bodyLabelUILabelDescrição do anúncio
callToActionButtonUIButtonBotão que convida o usuário a interagir
headlineLabelUILabelTítulo do anúncio
iconImageViewUIImageViewÍcone do anúncio
mediaContainerUIViewContainer para o conteúdo de mídia (imagem ou vídeo)
optionsContainerUIViewContainer para a view de opções do anúncio
priceLabelUILabelPreço do produto promovido
ratingContainerUIViewContainer para a avaliação do produto promovido
storeLabelUILabelLoja do produto promovido

Todos os outlets são opcionais, então você só precisa conectar os assets que o seu design exibe.

Para solicitar um anúncio nativo, você precisa fazer uma integração por código como mostra o exemplo abaixo:

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 da Wortise", delegate: self
)
loader.rootViewController = self
nativeAdLoader = loader
loader.loadAd()
}
deinit {
nativeAd?.destroy()
nativeAdLoader?.destroy()
}
}
extension ViewController: WANativeDelegate {
func didLoad(nativeAd: WANativeAd) {
// Invocado quando o anúncio foi carregado
self.nativeAd?.destroy()
self.nativeAd = nativeAd
// Instancia a view do anúncio e a adiciona à interface
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 quando o anúncio foi clicado
}
func didFailToLoad(nativeAd error: WAAdError) {
// Invocado quando não foi possível carregar o anúncio
// (por causa de um erro ou sem preenchimento (no fill))
}
func didImpress(nativeAd: WANativeAd) {
// Invocado quando o anúncio gerou uma impressão
}
func didPayRevenue(nativeAd: WANativeAd, data: WARevenueData) {
// Invocado quando o anúncio gerou receita
}
}

O método render(ad:into:) preenche os outlets da view com os assets do anúncio e os registra para rastrear os cliques e as impressões. Ele retorna false quando não foi possível renderizar o anúncio.

A classe WANativeAd expõe os assets do anúncio, que podem ser usados para personalizar a view antes de renderizá-la:

PropriedadeTipoDescrição
advertiserString?Nome do anunciante
bodyString?Descrição do anúncio
callToActionString?Texto da chamada para ação
headlineString?Título do anúncio
iconImage?Ícone do anúncio
images[Image]Imagens do anúncio
mediaContentMediaContent?Conteúdo de mídia do anúncio (imagem ou vídeo)
priceString?Preço do produto promovido
ratingDouble?Avaliação do produto promovido
storeString?Loja do produto promovido

O método loadAd também aceita uma instância de WARequestParameters, da mesma forma que os demais formatos:

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

Se o seu app já integrou a classe obsoleta WAGoogleNativeAd, estas são as equivalências com a nova integração:

ObsoletoSubstituição
WAGoogleNativeAd(adUnitId:delegate:)WANativeAdLoader(adUnitId:delegate:)
WAGoogleNativeDelegateWANativeDelegate
load()loadAd() (ou loadAd(parameters:))
didLoad(nativeAd:googleNativeAd:)didLoad(nativeAd:) — um WANativeAd, sem tipo do Google
didFailToLoad(nativeAd:error:)didFailToLoad(nativeAd:)
didRecord(impression:)didImpress(nativeAd:)
options ([GADAdLoaderOptions])removido — o SDK configura a solicitação
Sua própria GADNativeAdView e conexão de assetsOutlets de WANativeAdView + render(ad:into:)

Na prática, as mudanças são:

  1. Remova os tipos do Google. Não há mais um NativeAd do Google nos callbacks, então o app não precisa mais importar GoogleMobileAds para anúncios nativos.
  2. Substitua a classe da view. A view raiz do layout passa a ser uma WANativeAdView, conectando os outlets da seção View do anúncio em vez das asset views do Google.
  3. Renderize através do loader. Onde o app configurava uma GADNativeAdView no callback de carregamento, agora ele chama render(ad:into:).
  4. Media view. Remova a GADMediaView do layout e conecte uma UIView simples como mediaContainer; o SDK insere a media view correta para a rede que preencheu o anúncio.
func didLoad(nativeAd: WAGoogleNativeAd, googleNativeAd: NativeAd) {
let adView = // sua GADNativeAdView
adView.headlineView = headlineLabel
adView.callToActionView = callToActionButton
adView.mediaView = mediaView
// ... uma linha por asset ...
adView.nativeAd = googleNativeAd
}
func didLoad(nativeAd: WANativeAd) {
nativeAdLoader?.render(ad: nativeAd, into: adView)
}

Os apps que ainda usam WAGoogleNativeAd recebem a instância NativeAd do Google no callback didLoad(nativeAd:googleNativeAd:), e são responsáveis por construir a GADNativeAdView e registrar cada asset, conforme descrito na documentação do Google.