En esta guía, se muestra 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.
Los anuncios nativos coinciden con la forma y la función de la experiencia del usuario en la que se ubican. También se adecuan al diseño visual de la app en la que se encuentran. El formato de anuncios nativos de AdMob permite a los publicadores dibujar anuncios que se integran sin problemas con el contenido. Puedes usar esta tecnología para implementar procesamientos altamente personalizados 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 residen. Cuando se carga un anuncio nativo, tu app recibe un objeto nativo que contiene sus elementos y la app de Unity (en lugar del SDK) los muestra.
Requisitos previos
- Complemento de Unity de Google Mobile Ads para la versión 7.0.0 o posterior.
- Completa la guía de introducción.
- Descargue y luego instale el complemento de anuncios nativos.
Cargar formatos de anuncios nativos
Los anuncios nativos se cargan a través de la clase AdLoader
, que tiene su propia clase AdLoader.Builder
para personalizarla durante la creación. El método ForNativeAd()
configura AdLoader para controlar los anuncios nativos.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
Regístrese para los eventos de anuncios de AdLoader
Para recibir notificaciones cuando un anuncio nativo se cargue correctamente o no se realice, agrega delegados a la clase AdLoader
en los eventos que se indican a continuación.
OnNativeAdLoaded
Se invoca cuando un anuncio nativo se carga correctamente. Es necesario tener un delegado para que este evento acceda al anuncio que se cargó.
OnAdFailedToLoad
Se invoca cuando un anuncio nativo no se carga.
Cargar 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());
Une la solicitud de anuncio
En el siguiente fragmento de código, se muestra cómo compilar un AdLoader
configurado para solicitar anuncios nativos, configura los delegados para cargas de anuncios correctas y con errores, 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());
}
Cómo controlar las cargas de anuncios con errores
El evento OnAdFailedToLoad
es del tipo EventHandle<AdFailedToLoadEventArgs>
.
A continuación, se analiza el 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);
}
Cómo mostrar un anuncio nativo
Cuando se carga un anuncio nativo, se invoca el evento de anuncio correspondiente al formato de anuncio correspondiente. Entonces, tu app se encarga de mostrar el anuncio, aunque no es necesario que lo haga de inmediato.
Cómo controlar la carga de anuncios
El evento OnNativeAdLoaded
es del tipo EventHandler<NativeAdEventArgs>
. El anuncio, encapsulado en un objeto NativeAd
, se puede recuperar desde 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;
}
Recuperar elementos del anuncio nativo
Una vez que se carguen los anuncios, podrá acceder a sus elementos como se muestra a continuación. Los recursos gráficos se muestran como objetos Texture2D
y los recursos de texto 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 elementos del anuncio en el subproceso principal, por ejemplo, desde el método Update()
de una secuencia de comandos de Unity. Además, ten en cuenta que no siempre se garantiza que los siguientes elementos estén presentes, por lo que deben verificarse antes de mostrarse:
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
Recurso de AdChoices
Es obligatorio mostrar el elemento del anuncio de Selección de anuncios como parte del anuncio nativo. Además, es importante que el elemento del anuncio de AdChoices se vea con facilidad, por lo que debe elegir los colores y las imágenes de fondo de manera adecuada.
Registra GameObjects para el elemento del anuncio
Debes registrar el GameObject
para que el recurso del anuncio se muestre en tu app de Unity. Si se realiza correctamente el registro, el método que se use para registrar el GameObject
mostrará un bool
. Para un List<GameObject>
, el método muestra un int
que indica el recuento de GameObject
registrado correctamente.
Si el registro de un recurso de anuncio no se realiza correctamente, no se reconocerán las impresiones y 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 elemento de anuncio debe tener un componente de colisionador convexo que sea representativo del tamaño y la forma de GameObject
. Si a los objetos GameObject
registrados en los elementos de anuncios les faltan componentes Collider
o tienen uno configurado incorrectamente, 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 elemento de título del anuncio de un anuncio nativo. Una vez que BoxCollider
se adjunte a GameObject
, se ajustará la escala de forma automática 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 elemento de ícono de un anuncio nativo cargado correctamente, cómo mostrar el recurso de anuncio de ícono mediante la configuración de la textura de un Quad
y cómo registrar el GameObject
para usarlo a fin de mostrar el recurso. Este proceso de recuperación del recurso de anuncio y de registro con la clase de anuncio nativo debe repetirse para cada elemento 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;
}