En esta guía, te mostramos cómo usar el complemento de anuncios nativos para implementar anuncios nativos de AdMob en una app de Unity, así como algunos aspectos importantes que debes tener en cuenta durante el proceso.
Los anuncios nativos coinciden con la forma y la función de la experiencia del usuario en la que se colocan. También coinciden con el diseño visual de la app en la que se encuentran. El formato de anuncios nativos de AdMob permite que los publicadores rendericen anuncios que se adapten al contenido. Puedes usar esta tecnología para implementar renderizaciones altamente personalizadas que aprovechen al máximo el código nativo en las apps de Unity.
Los anuncios nativos se muestran con los mismos tipos de GameObjects con los que ya compilas tus apps y se pueden formatear para que coincidan con el diseño visual de la experiencia del usuario en la que se encuentran. Cuando se carga un anuncio nativo, tu app recibe un objeto nativo que contiene sus recursos, y la app de Unity (en lugar del SDK) los muestra.
Requisitos previos
- Complemento de Google Mobile Ads para Unity, versión 7.0.0 o posterior
- Completar la guía de introducción.
- Descargar e instalar el complemento de anuncios nativos.
Carga formatos de anuncios nativos
Los anuncios nativos se cargan a través de la clase AdLoader, que tiene su propia
AdLoader.Builder clase para personalizarla durante la creación. El método ForNativeAd() configura el AdLoader para controlar los anuncios nativos.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Regístrate para recibir eventos de anuncios de AdLoader
Para recibir una notificación cuando un anuncio nativo se cargue correctamente o no, agrega delegados a la clase AdLoader para los eventos que se indican a continuación.
OnNativeAdLoaded
Se invoca cuando se carga correctamente un anuncio nativo. Es necesario tener un delegado para este evento para acceder al anuncio que se cargó.
OnAdFailedToLoad
Se invoca cuando no se puede cargar un anuncio nativo.
Carga el anuncio
Una vez que termines de compilar un AdLoader, llama a su método LoadAd() para solicitar un anuncio:
adLoader.LoadAd(new AdRequest.Builder().Build());
Reúne la solicitud de anuncio
En el siguiente fragmento de código, se muestra cómo compilar un AdLoader que está configurado para solicitar anuncios nativos, establece delegados para cargas de anuncios exitosas y fallidas, y realiza una solicitud de anuncio.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
adLoader.LoadAd(new AdRequest.Builder().Build());
}
Controla las cargas de anuncios fallidas
El evento OnAdFailedToLoad es de tipo EventHandle<AdFailedToLoadEventArgs>.
A continuación, se muestra el análisis del motivo de una falla en la carga de anuncios de este evento.
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
Muestra un anuncio nativo
Cuando se carga un anuncio nativo, se invoca el evento de anuncio para el formato de anuncio correspondiente. Tu app es responsable de mostrar el anuncio, aunque no necesariamente debe hacerlo de inmediato.
Controla la carga de anuncios
El evento OnNativeAdLoaded es de tipo EventHandler<NativeAdEventArgs>. El
anuncio, encapsulado en un NativeAd objeto, se puede recuperar de
NativeAdEventArgs como se muestra a continuación:
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
Recupera recursos de anuncios nativos
Una vez que se cargan los anuncios, se puede acceder a sus recursos como se muestra a continuación. Los recursos gráficos se muestran como objetos Texture2D y los recursos de texto se muestran como objetos string.
private bool nativeAdLoaded;
private NativeAd nativeAd;
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for the icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
// Get string for headline asset of native ad.
string headline = this.nativeAd.GetHeadlineText();
}
}
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}
Ten en cuenta que solo se debe acceder a los recursos de anuncios en el subproceso principal, por ejemplo, desde el método Update() de una secuencia de comandos de Unity. También ten en cuenta que no siempre se garantiza que estén presentes los siguientes recursos y que se deben verificar antes de mostrarlos:
GetStarRating()GetStore()GetPrice()GetAdvertiser()GetIconTexture()
Recurso de AdChoices
Es un requisito mostrar el recurso de anuncio de AdChoices como parte del anuncio nativo. Además, es importante que el recurso de anuncio de AdChoices se vea con facilidad, por lo que debes elegir imágenes y colores de fondo adecuados.
Registra GameObjects para el recurso de anuncio
Debes registrar el GameObject para que se muestre el recurso de anuncio en tu app de Unity. Si el registro se realiza correctamente, el método que se usa para registrar el GameObject muestra un bool. Para un List<GameObject>, el método muestra un
int que indica la cantidad de GameObject registrados correctamente.
Si no se registra un recurso de anuncio, no se reconocerán las impresiones ni los clics en el anuncio nativo correspondiente.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
El GameObject que se registra para un recurso de anuncio debe tener un componente Collider convexo que represente el tamaño y la forma del GameObject. Si los objetos GameObject registrados en los recursos de anuncios no tienen componentes Collider o tienen uno configurado de forma incorrecta, los anuncios nativos no funcionarán correctamente.
En el siguiente fragmento de código, se agrega un BoxCollider a GameObject que usa un TextMesh para mostrar el recurso de anuncio de título de un anuncio nativo. Una vez que el BoxCollider se adjunte al GameObject, se ajustará automáticamente para adaptarse al texto del componente TextMesh.
// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;
// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;
// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();
Demostración
En el siguiente código, se muestra cómo recuperar el recurso de ícono de un anuncio nativo cargado correctamente, mostrar el recurso de anuncio de ícono configurando la textura de un Quad y registrar el GameObject para usarlo para mostrar el recurso. Este proceso de recuperación del recurso de anuncio y su registro con la clase de anuncio nativo se debe repetir para cada uno de los recursos que muestra la app.
private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
icon.transform.position = new Vector3(1, 1, 1);
icon.transform.localScale = new Vector3(1, 1, 1);
icon.GetComponent<Renderer>().material.mainTexture = iconTexture;
// Register GameObject that will display icon asset of native ad.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register ad asset.
}
}
}
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}