La API de anuncios nativos te permite crear una experiencia personalizada para los anuncios que aparecen en tu aplicación. Cuando utilices la API de anuncios nativos, en lugar de un anuncio listo para mostrarse, recibirás un grupo de propiedades de anuncio, como un título, una imagen y una llamada a la acción, que tendrás que utilizar para crear una clase “UIView” personalizada donde se muestre el anuncio.
Consulta nuestra guía de anuncios nativos al diseñar anuncios de este tipo en tu aplicación.
Vamos a implementar la siguiente ubicación de anuncio nativo. Crearás los siguientes elementos “View” para nuestro anuncio nativo:
Elemento n.º 1: icono del anuncianteElemento n.º 2: título del anuncioElemento n.º 3: etiqueta “Publicidad”Elemento n.º 4: logotipo de AdChoices | Elemento n.º 5: contenido multimedia del anuncioElemento n.º 6: contexto socialElemento n.º 7: cuerpo del anuncioElemento n.º 8: botón de llamada a la acción |
Asegúrate de haber completado las guías de primeros pasos de Audience Network e iOS antes de continuar.
Asegúrate de seguir las normas de diseño para iOS cuando crees anuncios nativos o banners a fin de ofrecer una experiencia de usuario óptima.
Main.storyboard
. Añade un elemento “UIView” al elemento “View” principal y asígnale el nombre adUIView
. adIconImageView
(FBMediaView), adTitleLabel
(UILabel), adCoverMediaView
(FBMediaView), adSocialContext
(UILabel), adCallToActionButton
(UIButton), adOptionsView
(FBAdOptionsView), adBodyLabel
(UILabel), sponsoredLabel
(UILabel) en adUIView
, como se muestra en esta imagen. ViewController.m
(ViewController.swift
si estás utilizando Swift) y, a continuación, arrastra el elemento adUIView
al interior del objeto ViewController. Puedes asignarle el nombre adUIView
. A continuación, debes repetir la misma operación con los elementos adIconImageView
, adTitleLabel
, adCoverMediaView
, adSocialContext
, adCallToActionButton
, adOptionsView
, adBodyLabel
y sponsoredLabel
.El siguiente paso tras crear todos los elementos de la IU necesarios para mostrar este tipo de anuncios consiste en cargar el anuncio nativo y vincular los diversos contenidos a los elementos correspondientes de la IU.
ViewController
implementa el protocolo FBNativeAdDelegate
y añade una variable de instancia FBNativeAd
.
import UIKit
import FBAudienceNetwork
class ViewController: UIViewController, FBNativeAdDelegate {
private var nativeAd: FBNativeAd?
}
viewDidLoad
, añade las siguientes líneas de código para cargar el contenido del anuncio nativo:
override func viewDidLoad() {
super.viewDidLoad()
let nativeAd = FBNativeAd(placementID: "YOUR_PLACEMENT_ID")
nativeAd.delegate = self
nativeAd.loadAd()
}
El identificador que se muestra en YOUR_PLACEMENT_ID
es un identificador temporal solo con fines de prueba.
Si utilizas este identificador temporal en el código activo, los usuarios no recibirán anuncios y obtendrán un error “No Fill”. Debes volver aquí tras las pruebas y sustituir el identificador temporal con un identificador de ubicación activo.
Para obtener más información sobre cómo generar un identificador de ubicación activo, consulta Configuración de Audience Network.
nativeAdDidLoad
en ViewController
.
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
// 1. If there is an existing valid native ad, unregister the view
if let previousNativeAd = self.nativeAd, previousNativeAd.isAdValid {
previousNativeAd.unregisterView()
}
// 2. Retain a reference to the native ad object
self.nativeAd = nativeAd
// 3. Register what views will be tappable and what the delegate is to notify when a registered view is tapped
// Here only the call-to-action button and the media view are tappable, and the delegate is the view controller
nativeAd.registerView(
forInteraction: adUIView,
mediaView: adCoverMediaView,
iconView: adIconImageView,
viewController: self,
clickableViews: [adCallToActionButton, adCoverMediaView]
)
// 4. Render the ad content onto the view
adTitleLabel.text = nativeAd.advertiserName
adBodyLabel.text = nativeAd.bodyText
adSocialContextLabel.text = nativeAd.socialContext
sponsoredLabel.text = nativeAd.sponsoredTranslation
adCallToActionButton.setTitle(nativeAd.callToAction, for: .normal)
adOptionsView.nativeAd = nativeAd
}
Para conseguir unos resultados y una experiencia de usuario mejores, considera la posibilidad de controlar la zona interactiva del anuncio para evitar los clics no intencionados. Consulta la página de la Política del SDK de Audience Network para obtener más información sobre las normas relativas a los espacios en blanco en los que no se puede hacer clic.
Al poner anuncios en circulación en el simulador, debes cambiar la configuración al modo de prueba para poder ver los anuncios de este tipo. Accede a Cómo usar el modo de prueba para obtener más información al respecto.
En el ejemplo anterior, el contenido multimedia del anuncio se muestra en el elemento adCoverMediaView
, cuyo tipo de objeto es FBMediaView
. En un paso anterior, hemos visto cómo utilizar FBMediaView para cargar contenido multimedia de un objeto FBNativeAd
determinado. Este elemento “View” sustituye la carga manual de una imagen de portada. Al crear el elemento FBMediaView
, su anchura y altura pueden integrarse como parte del código o determinarse por las restricciones de diseño automáticas que se establecen en el archivo Storyboard. Sin embargo, es posible que la anchura y altura de este elemento no encajen con la imagen de portada del anuncio que se descargue más tarde. Para solucionar este problema, en el siguiente ejemplo se muestra cómo obtener la relación de aspecto del contenido y aplicar la anchura y altura naturales:
FBMediaViewDelegate
.
class ViewController: UIViewController, FBNativeAdDelegate, FBMediaViewDelegate {
...
}
FBMediaView
para que sea el “ViewController”.
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
adCoverMediaView.delegate = self
}
mediaViewDidLoad
en el elemento “ViewController”.
func mediaViewDidLoad(_ mediaView: FBMediaView) {
let currentAspect = mediaView.frame.size.width / mediaView.frame.size.height
print(currentAspect)
let actualAspect = mediaView.aspectRatio
print(actualAspect)
}
mediaView.aspectRatio
devuelve un valor CGFloat positivo, o 0,0 si no se ha cargado ningún anuncio. Su valor es válido después de que se haya cargado la visualización del contenido multimedia. Existen métodos sencillos para establecer la anchura y altura del objeto FBMediaView de forma que se respete la relación de aspecto del contenido multimedia cargado. Puedes llamar a applyNaturalWidth
o applyNaturalHeight
para actualizar la anchura o altura del objeto FBMediaView
de forma que se adapte a la relación de aspecto del contenido multimedia.
Dispones de la opción de añadir las siguientes funciones para gestionar los casos en los que el usuario hace clic en el anuncio nativo o las ocasiones en las que lo cierra:
func nativeAdDidClick(_ nativeAd: FBNativeAd) {
print("Native ad was clicked.")
}
func nativeAdDidFinishHandlingClick(_ nativeAd: FBNativeAd) {
print("Native ad did finish click handling.")
}
func nativeAdWillLogImpression(_ nativeAd: FBNativeAd) {
print("Native ad impression is being captured.")
}
Añade e implementa la siguiente función en el archivo del controlador de vista para gestionar los procesos de carga fallidos del anuncio:
func nativeAd(_ nativeAd: FBNativeAd, didFailWithError error: Error) {
print("Native ad failed to load with error: \(error.localizedDescription)")
}
let nativeAd = FBNativeAd(placementID: "YOUR_PLACEMENT_ID")
nativeAd.delegate = self
nativeAd.loadAd(withMediaCachePolicy: .none)
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
...
self.adCoverMediaView.delegate = self
nativeAd.downloadMedia()
self.nativeAd = nativeAd
...
}
registerViewForInteraction
y mostrar el anuncio después de la devolución de llamada mediaViewDidLoad
. Es necesario cargar y mostrar todo el contenido multimedia de una impresión válida.
func mediaViewDidLoad(_ mediaView: FBMediaView) {
guard let nativeAd = nativeAd else {
return
}
// 1. Register what views will be tappable and what the delegate is to notify when a registered view is tapped
// Here only the call-to-action button and the media view are tappable, and the delegate is the view controller
nativeAd.registerView(
forInteraction: adUIView,
mediaView: mediaView,
iconView: adIconImageView,
viewController: self,
clickableViews: [adCallToActionButton, mediaView]
)
// 2. Render the ad content onto the view
adTitleLabel.text = nativeAd.advertiserName
adBodyLabel.text = nativeAd.bodyText
adSocialContextLabel.text = nativeAd.socialContext
sponsoredLabel.text = nativeAd.sponsoredTranslation
adCallToActionButton.setTitle(nativeAd.callToAction, for: .normal)
adOptionsView.nativeAd = nativeAd
}
NativeAdSample
está disponible como parte del SDK en la carpeta FBAudienceNetwork/samples
. Abre el proyecto con Xcode y ejecútalo en un dispositivo o en el simulador. Más recursos |
Guía de introducciónGuía técnica para empezar a usar Audience Network Ejemplos de códigoEjemplos de la integración de anuncios de Audience Network | Preguntas frecuentesPreguntas frecuentes sobre Audience Network Plantilla de anuncios nativosEnfoque más práctico para integrar los anuncios nativos |