En esta guía se explica cómo crear y mostrar anuncios en aplicaciones mediante la función de emplazamientos publicitarios de los anuncios de Google para móviles, integrada en el complemento de Unity.
Requisitos previos
Unity 2017.4 o una versión posterior.
Descarga e importa la versión de acceso anticipado del complemento de Unity de anuncios de Google para móviles (GMA).
Define el ID de aplicación de AdMob en el editor de Unity.
Inicializar el SDK de anuncios de Google para móviles
Antes de cargar anuncios, inicializa el SDK de anuncios para móviles llamando a MobileAds.Initialize()
, con una retrollamada de Action<InitializationStatus>
. Solo es necesario hacerlo una vez, preferiblemente al iniciar la aplicación.
using GoogleMobileAds.Api;
using System.Collections.Generic;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
...
public void Start()
{
// Initialize the Mobile Ads SDK.
MobileAds.Initialize((initStatus) =>
{
// SDK initialization is complete
});
...
}
}
Crear emplazamientos publicitarios
El primer paso para mostrar un banner con anuncios de Google para móviles es crear y configurar un emplazamiento publicitario. En el editor de Unity, puedes seleccionar formatos de banner, intersticiales o bonificados en Assets > Google Mobile Ads > Ad Placements (Recursos > Anuncios de Google para móviles > Emplazamientos publicitarios). Encontrarás tres emplazamientos publicitarios de demostración configurados y listos para usar.
Para añadir un emplazamiento publicitario nuevo, haz clic en el botón Add New Placement (Añadir nuevo emplazamiento) al final de la lista. Puedes configurarlo desde la vista Inspector (Inspector).
Configurar emplazamientos publicitarios
Cada emplazamiento tiene las siguientes propiedades:
- Placement Name (Nombre del emplazamiento)
- El nombre del emplazamiento. Se utiliza para identificar emplazamientos cuando se configuran anuncios en una escena.
- Ad Format (Formato del anuncio)
- Banner, bonificado e intersticial. Es el tipo de anuncio.
- Ad unit ID (ID del bloque de anuncios)
- Indica el ID del bloque de anuncios de banner para iOS y Android. Debes facilitar al menos un ID de bloque de anuncios.
- Persistent across scenes (Permanencia entre escenas)
- Al marcar esta opción, el banner se mostrará en la pantalla independientemente de los cambios de escena que se produzcan (el mismo comportamiento que
DontDestroyOnLoad
). - Auto Load Enabled (Carga automática habilitada)
- Al marcar esta opción, se cargará automáticamente un anuncio cuando se cargue una escena asociada al emplazamiento publicitario.
En la siguiente captura de pantalla se muestra un ejemplo de emplazamiento publicitario denominado My Awesome Banner.
Añadir un AdGameObject a la escena
En el editor de Unity, puedes añadir un AdGameObject para formatos de banner, intersticiales o bonificados en GameObject > Google Mobile Ads (GameObject > Anuncios de Google para móviles). Selecciona el formato que quieres usar para añadir un emplazamiento a la escena activa.
Cuando añadas un AdGameObject a la escena, verás un GameObject que representa el anuncio en la vista Hierarchy (Jerarquía) del editor de Unity.
Si quieres cambiar el nombre del emplazamiento, modifica el nombre del GameObject. En la siguiente captura de pantalla se muestra un ejemplo de AdGameObject denominado Banner Ad (Anuncio de banner).
Configuración de AdGameObject
Puedes configurar el AdGameObject en tu escena desde la vista Inspector (Inspector) en la configuración del componente Ad Game Object (Script) [Objeto de juegos en anuncios (secuencia de comandos)].
- Emplazamiento publicitario
Selecciona el emplazamiento publicitario de la lista desplegable con los emplazamientos configurados. La lista solo tendrá bloques de anuncios para el formato correspondiente. Por ejemplo, en el caso de los objetos de juegos en anuncios de banner, el menú desplegable solo mostrará los emplazamientos configurados para anuncios de banner.
- Configuración de
BannerAdGameObject
(solo banner)
- Size (Tamaño): selecciona el tamaño del banner que quieres utilizar.
- El Anchored Adaptive Banner (Banner adaptativo anclado) incluye algunas opciones más:
- Orientation (Orientación): selecciona la orientación que usa el dispositivo para calcular la altura del anuncio.
- Use full screen width (Utilizar anchura de pantalla completa): si se marca esta opción, el banner ocupa todo el ancho de la pantalla. Puedes ajustar el porcentaje de anchura de la pantalla (del 50 al 99 %) si desmarcas la opción Use full screen width (Utilizar anchura de pantalla completa).
- Custom (Personalizado) te permite indicar la anchura y la altura del banner.
- El Anchored Adaptive Banner (Banner adaptativo anclado) incluye algunas opciones más:
- Ad Position (Posición del anuncio): selecciona la posición en la que se debe colocar el banner.
Retrollamadas
Puedes implementar funciones que correspondan a las retrollamadas de anuncios. Por ejemplo, si quieres gestionar los anuncios de banner que no se cargan, sigue estos pasos:
Crea una función compatible con la retrollamada de anuncios.
public void OnBannerAdFailedToLoad(string reason) { Debug.Log("Banner ad failed to load: " + reason); }
Adjunta la secuencia de comandos que contiene la función anterior a cualquier GameObject de la escena.
Haz clic en el botón + y, a continuación, arrastra y suelta el GameObject al que has asociado la secuencia de comandos.
Selecciona la función que quieras vincular a la retrollamada de anuncios. En el apartado de retrollamadas de anuncios con parámetros, selecciona la función para aceptar la variable dinámica. De este modo, podrás obtener el valor de los parámetros del SDK.
Usar AdGameObject desde la secuencia de comandos
Conseguir la instancia de AdGameObject a partir de la secuencia de comandos
Todos los objetos AdGameObject
tienen el método de conveniencia LoadAd()
, que consiste en cargar un anuncio con un AdRequest
simple y sin segmentar. Para aplicar la segmentación, debes usar LoadAd(AdRequest adRequest)
con la solicitud de anuncio que has configurado.
Para obtener la instancia de un AdGameObject, utiliza el siguiente método para cada formato:
Banner
MobileAds.Instance.GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");
El objeto BannerAdGameObject
devuelto también tiene los métodos de conveniencia Hide()
y Show()
.
Intersticial
MobileAds.Instance.GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");
El objeto InterstitialAdGameObject
devuelto tiene un método de conveniencia ShowIfLoaded()
.
Bonificado
MobileAds.Instance.GetAd<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");
El objeto RewardedAdGameObject
devuelto tiene un método de conveniencia ShowIfLoaded()
.
Por ejemplo, puedes obtener una instancia de BannerAdGameObject
y cargarla de la siguiente manera:
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;
public class BannerTestScript : MonoBehaviour
{
BannerAdGameObject bannerAd;
void Start()
{
bannerAd = MobileAds.Instance
.GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");
bannerAd.LoadAd();
...
}
...
}
Si hay un BannerAdGameObject
denominado BannerAd, puedes obtener una instancia de esta forma:
MobileAds.Instance.GetAd<BannerAdGameObject>("BannerAd");
Acceder al objeto de anuncio subyacente en AdGameObject
En estos fragmentos de código se explica cómo acceder al objeto de anuncio subyacente asociado al AdGameObject.
Banner
BannerAdGameObject bannerAd = MobileAds.Instance
.GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");
// Access BannerView object
BannerView bannerView = bannerAd.BannerView;
Intersticial
InterstitialAdGameObject interstitialAdGameObject = MobileAds.Instance
.GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");
// Access InterstitialAd object
InterstitialAd interstitialAd = interstitialAdGameObject.InterstitialAd;
Bonificado
RewardedAdGameObject rewardedAdGameObject = MobileAds.Instance
.Get<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");
// Access RewardedAd object
RewardedAd rewardedAd = rewardedAdGameObject.RewardedAd;
Ejemplos
Mostrar un anuncio intersticial
A continuación se muestra un ejemplo de cómo configurar un juego para cargar y mostrar un anuncio intersticial usando un AdGameObject.
Añade un InterstitialAdGameObject
a la escena y activa la función Auto Load Enabled (Carga automática habilitada) para que el anuncio se cargue automáticamente cuando lo haga la escena.
Después, comprueba que has inicializado el SDK usando el método que se indica más adelante. Si olvidas inicializarlo, la función Auto Load (Carga automática) de AdGameObject no se accionará.
A continuación, muestra un anuncio intersticial cuando se cambie de pantalla llamando a la función InterstitialAdGameObject.ShowIfLoaded()
. El siguiente código es un ejemplo de cómo mostrar un anuncio intersticial entre escenas.
using UnityEngine;
using UnityEngine.SceneManagement;
using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;
public class MainScene : MonoBehaviour
{
InterstitialAdGameObject interstitialAd;
void Start()
{
interstitialAd = MobileAds.Instance
.GetAd<InterstitialAdGameObject>("interstitial");
MobileAds.Initialize((initStatus) => {
Debug.Log("Initialized MobileAds");
});
}
public void OnClickShowGameSceneButton()
{
// Display an interstitial ad
interstitialAd.ShowIfLoaded();
// Load a scene named "GameScene"
SceneManager.LoadScene("GameScene");
}
}
Como has habilitado la función Auto Load (Carga automática) en el emplazamiento del anuncio, no tienes que solicitar un anuncio de forma explícita. Cuando la escena cambie, aparecerá un anuncio intersticial si hay alguno listo.
Si quieres solicitar un anuncio manualmente, inhabilita la función Auto Load (Carga automática) desde el inspector de emplazamientos publicitarios y llama a la función InterstitialAdGameObject.LoadAd()
. En el siguiente fragmento de código se muestra cómo solicitar un anuncio de forma manual.
public class MainScene : MonoBehaviour
{
InterstitialAdGameObject interstitialAd;
void Start()
{
interstitialAd = MobileAds.Instance
.GetAdGameObject<InterstitialAdGameObject>("interstitial");
MobileAds.Initialize((initStatus) => {
Debug.Log("MobileAds initialized");
// Load an interstitial ad after the SDK initialization is complete
interstitialAd.LoadAd();
});
}
...
}
Gestionar el estado del botón "Watch a Rewarded Ad" (Ver un anuncio bonificado)
En este ejemplo se muestra cómo habilitar un botón "Watch a Rewarded Ad" (Ver un anuncio bonificado) usando los emplazamientos publicitarios.
Añade un GameObject de botón (denominado Button [Botón]) a la escena, que se utilizará para mostrar un anuncio bonificado. Solo podremos habilitar este botón cuando haya un anuncio bonificado disponible.
En el método Start()
, cambia el estado activo del botón a false
para que desaparezca de la escena.
public class MainScene : MonoBehaviour
{
...
void Start()
{
GameObject.Find("Button").SetActive(false);
...
}
}
Añade un RewardedAdGameObject
a la escena y, en el menú desplegable, selecciona el emplazamiento publicitario AdMob Demo Rewarded Ad (Anuncio bonificado de demostración de AdMob).
En la sección Callbacks (Retrollamadas) del inspector de RewardedAdGameObject
, haz clic en el botón + que aparece en On Ad Loaded() [Al cargar un anuncio()] para habilitar la función a la que quieres hacer una llamada cuando se cargue un anuncio bonificado.
Arrastra el GameObject del botón que has añadido en el paso anterior y suéltalo en el campo None (Object) [Ninguno (Objeto)]. Selecciona una función del menú desplegable a la que quieres que se llame.
Haz clic en No Function > GameObject > SetActive(bool) [Sin función > GameObject > SetActive (booleano)] y marca la casilla para que se envíe true
como parámetro (llama al valor SetActive(true)
).
En la sección Callbacks (Retrollamadas), también puedes vincular un evento, al que se llamará cuando se active el evento RewardedAd.OnUserEarnedReward
. Para obtener más información, consulta esta sección.
Después, configura el botón para que muestre un anuncio bonificado cuando se haga clic en él. En la sección de retrollamadas On Click() [Al hacer clic()] del inspector de botones, haz clic en el botón +; luego, arrastra el GameObject de emplazamientos publicitarios bonificados (denominado Rewarded Ad [Anuncio bonificado] en este ejemplo) y suéltalo en el campo None (Object) [Ninguno (Objeto)].
A continuación, adjunta la función RewardedAdGameObject.ShowIfLoaded()
a la retrollamada On Click() [Al hacer clic()] del botón.
Por último, no olvides inicializar el SDK. El siguiente fragmento de código es el código completo de la escena que se utiliza en este ejemplo:
using UnityEngine;
using GoogleMobileAds.Api;
public class MainScene : MonoBehaviour
{
void Start()
{
GameObject.Find("Button").SetActive(false);
MobileAds.Initialize((initStatus) => {
Debug.Log("Initialized MobileAds");
});
}
}
Una vez que el proyecto se haya ejecutado, el botón aparecerá en la escena cuando se cargue un anuncio bonificado y esté listo para mostrarse.
Configurar una retrollamada de bonificación para un RewardedAdGameObject
A continuación, te mostramos un ejemplo de cómo configurar una retrollamada de bonificación para un emplazamiento publicitario bonificado, de modo que puedas ofrecer recompensas a los usuarios cuando se llame a una función de retrollamada.
Crea una secuencia de comandos y define una función que acepte Reward
como parámetro, tal y como se indica a continuación.
using UnityEngine;
using GoogleMobileAds.Api;
class RewardedTestScript : MonoBehaviour {
...
public void OnUserEarnedReward(Reward reward) {
Debug.Log("OnUserEarnedReward: reward=" +
reward.Type + ", amount=" + reward.Amount);
}
...
}
Adjunta la secuencia de comandos RewardedTestScript
a cualquier GameObject de la escena, exceptuando el del emplazamiento publicitario. En este ejemplo, se vincula al GameObject de la cámara principal.
Añade un RewardedAdGameObject
a la escena. Después, en la sección Callbacks (Retrollamadas) del inspector RewardedAdGameObject
, haz clic en el botón + que aparece en On User Earned Reward (Reward) [Cuando el usuario gane una bonificación (Recompensa)]. De esta forma, se llamará a esta función cuando se conceda una bonificación a un usuario.
Arrastra el GameObject de la cámara principal que has añadido en el paso anterior y suéltalo en el campo None (Object) [Ninguno (Objeto)]. Selecciona una función del menú desplegable a la que quieres que se llame. Haz clic en No Function > RewardedTestScript > OnUserEarnedReward (Sin función > RewardedTestScript > OnUserEarnedReward).
Cuando ejecutes el proyecto y veas un anuncio bonificado, se invocará el comando RewardedTestScript.OnUserEarnedReward()
para que obtengas una bonificación por interactuar con él.