En esta guía, se muestra cómo usar la función Ad Placements del complemento Google Mobile Ads para Unity para crear y mostrar anuncios en tu app.
Requisitos previos
Unity 2017.4 o una versión posterior
Descarga e importa la compilación anticipada del complemento de GMA para Unity.
Configura tu ID de app de AdMob en el editor de Unity.
Inicializa el SDK de anuncios de Google para dispositivos móviles
Antes de cargar anuncios, llama a MobileAds.Initialize()
para inicializar el SDK de anuncios de Google para dispositivos móviles con una devolución de llamada de Action<InitializationStatus>
. Esto solo se debe hacer una vez, idealmente cuando se inicia la app.
using GoogleMobileAds.Api;
using System.Collections.Generic;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
...
public void Start()
{
// Initialize Google Mobile Ads SDK.
MobileAds.Initialize((initStatus) =>
{
// SDK initialization is complete
});
...
}
}
Cómo crear posiciones de anuncios
El primer paso para mostrar un banner con los anuncios de Google para dispositivos móviles es crear y configurar una posición del anuncio. Puedes seleccionar una posición del anuncio en formato de banner, intersticial o recompensado en Assets > Google Mobile Ads > Ad Placements en Unity Editor. Luego, se configuran tres posiciones de anuncios de demostración que están listas para usarse.
Para agregar una nueva posición del anuncio, haz clic en el botón Add New Placement al final de la lista. Puedes configurar la posición del anuncio desde la vista Inspector.
Configuración de la posición del anuncio
Cada posición tiene las siguientes propiedades:
- Nombre de la ubicación
- Nombre de la posición. Se usa para identificar posiciones cuando se configuran anuncios en una escena.
- Formato del anuncio
- Banner, recompensado e intersticial. Es el tipo de anuncio.
- ID de la unidad de anuncios
- Proporciona el ID de tu unidad de anuncios de banner para Android y iOS. Debes proporcionar al menos un ID de unidad de anuncios.
- Persistente en todas las escenas
- Cuando se marca esta opción, el banner permanecerá en la pantalla independientemente de los cambios de escena (el mismo comportamiento que
DontDestroyOnLoad
). - Carga automática habilitada
- Si se marca esta opción, se cargará automáticamente un anuncio cuando se cargue una escena asociada con la posición del anuncio.
En la siguiente captura de pantalla, se muestra un ejemplo de una posición del anuncio llamada Mi banner increíble.
Cómo agregar un AdGameObject a la escena
Puedes agregar un AdGameObject para los formatos de banner, intersticial o recompensado a tu escena con GameObject > Google Mobile Ads en el editor de Unity. Selecciona el formato para agregar una posición a la escena activa.
Una vez que agregues un AdGameObject a la escena, verás un GameObject que representa el anuncio en la vista de jerarquía del editor de Unity.
Puedes cambiar el nombre de la posición cambiando el nombre del propio GameObject. En la siguiente captura de pantalla, se muestra un ejemplo de un AdGameObject llamado Banner Ad.
Configuración de AdGameObject
Puedes configurar el objeto AdGameObject en tu escena desde la vista Inspector en la configuración del componente Ad Game Object (Script).
- Ubicación del anuncio
Selecciona la posición del anuncio en la lista desplegable de posiciones configuradas. La lista solo tendrá unidades de anuncios para el formato correcto. Por ejemplo, en el caso de los objetos de juego de anuncios de banner, el menú desplegable solo mostrará las posiciones de anuncios de banner configuradas.
- Configuración de
BannerAdGameObject
(solo para banners)
- Tamaño: Selecciona el tamaño del banner que deseas usar.
- El banner adaptable fijo proporciona algunas opciones más:
- Orientación: Selecciona la orientación del dispositivo que se usa para calcular la altura del anuncio.
- Usar el ancho de pantalla completa: Cuando se selecciona esta opción, el banner ocupa el ancho de pantalla completa. Puedes ajustar el porcentaje de ancho de la pantalla (del 50 % al 99%) si desmarcas la opción Usar ancho de pantalla completa.
- Personalizado te permite proporcionar el ancho y la altura del banner.
- El banner adaptable fijo proporciona algunas opciones más:
- Posición del anuncio: Selecciona la posición en la que se debe colocar el banner.
Devoluciones de llamada
Puedes implementar funciones que correspondan a devoluciones de llamada de anuncios. Por ejemplo, si deseas controlar cuándo falla la carga de un anuncio de banner, haz lo siguiente:
Crea una función compatible con la devolución de llamada del anuncio.
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, luego, arrastra y suelta el GameObject al que adjuntaste la secuencia de comandos.
Selecciona la función que deseas vincular a la devolución de llamada del anuncio. Para las devoluciones de llamada de anuncios parametrizadas, selecciona la función para aceptar la variable dinámica, de modo que puedas obtener el valor del parámetro del SDK.
Cómo usar AdGameObject desde una secuencia de comandos
Obtén la instancia de AdGameObject del script
Todos los objetos AdGameObject
tienen el método de conveniencia LoadAd()
. Esto cargará un anuncio con un AdRequest
simple y sin segmentar. Para aplicar la segmentación, debes usar LoadAd(AdRequest adRequest)
con tu propia solicitud de anuncio configurada.
Para obtener la instancia de un AdGameObject, usa el siguiente método para cada formato:
Banner
MobileAds.Instance.GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");
El objeto BannerAdGameObject
que se muestra también tiene métodos de conveniencia Hide()
y Show()
.
Intersticial
MobileAds.Instance.GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");
El objeto InterstitialAdGameObject
que se devuelve tiene un método de conveniencia ShowIfLoaded()
.
Recompensado
MobileAds.Instance.GetAd<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");
El objeto RewardedAdGameObject
que se devuelve tiene un método de conveniencia ShowIfLoaded()
.
Por ejemplo, puedes obtener una instancia de un BannerAdGameObject
y cargarlo 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
llamado BannerAd, puedes obtener una instancia de la siguiente manera:
MobileAds.Instance.GetAd<BannerAdGameObject>("BannerAd");
Accede al objeto de anuncio subyacente en AdGameObject
En estos fragmentos, se muestra cómo acceder al objeto de anuncio subyacente asociado con 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;
Recompensado
RewardedAdGameObject rewardedAdGameObject = MobileAds.Instance
.Get<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");
// Access RewardedAd object
RewardedAd rewardedAd = rewardedAdGameObject.RewardedAd;
Ejemplos
Muestra un anuncio intersticial
A continuación, se muestra un ejemplo de cómo configurar un juego para cargar y mostrar un anuncio intersticial con un AdGameObject.
Agrega un InterstitialAdGameObject
a la escena y activa la función Auto Load Enabled para que el anuncio se cargue automáticamente cuando se cargue la escena.
A continuación, asegúrate de haber inicializado el SDK de la siguiente manera. Ten en cuenta que la función Carga automática de AdGameObject no funcionará si olvidas inicializar el SDK.
Luego, llama a la función InterstitialAdGameObject.ShowIfLoaded()
para mostrar un anuncio intersticial entre una transición de pantalla. En el siguiente código, se muestra un ejemplo de cómo mostrar un anuncio intersticial entre la transición de una escena.
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 habilitaste la función Carga automática en la posición del anuncio, no es necesario que solicites un anuncio de forma explícita. Cuando cambie la escena, aparecerá un anuncio intersticial si hay uno disponible.
Si quieres solicitar un anuncio de forma manual, inhabilita la función Carga automática en el inspector de posiciones de anuncios 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();
});
}
...
}
Cómo controlar el estado del botón "Mirar un anuncio recompensado"
A continuación, se muestra un ejemplo de cómo habilitar un botón para mirar un anuncio recompensado con posiciones de anuncios.
Agrega un objeto Button GameObject (llamado Button en este ejemplo) a la escena, que se usará para mostrar un anuncio recompensado. Habilitaremos este botón solo cuando haya un anuncio recompensado disponible.
En el método Start()
, cambia el estado activo del botón a false
. Con esta acción, el botón desaparecerá de la escena.
public class MainScene : MonoBehaviour
{
...
void Start()
{
GameObject.Find("Button").SetActive(false);
...
}
}
Agrega un RewardedAdGameObject
a la escena y selecciona la posición del anuncio AdMob Demo Rewarded Ad en el menú desplegable.
En la sección Callbacks del inspector de RewardedAdGameObject
, haz clic en el botón + de On Ad Loaded() para habilitar la función que se llamará cuando se cargue un anuncio recompensado.
Arrastra y suelta el objeto Button GameObject que agregaste en el paso anterior en el campo None (Object). Selecciona una función para llamar desde el menú desplegable.
Haz clic en No Function > GameObject > SetActive(bool) y, luego, en la casilla de verificación para que envíe true
como parámetro (llama a SetActive(true)
).
En esta sección de devoluciones de llamada, también puedes vincular un evento que se llamará cuando se active el evento RewardedAd.OnUserEarnedReward
. Para obtener más detalles, consulta esta sección.
A continuación, haz que el botón muestre un anuncio recompensado cuando se haga clic en él. En la sección On Click() Callbacks del inspector de botones, haz clic en el botón + y arrastra y suelta el GameObject de la posición del anuncio recompensado (llamado Rewarded Ad en este ejemplo) en el campo None (Object).
Luego, adjunta la función RewardedAdGameObject.ShowIfLoaded()
a la devolución de llamada On Click() 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 usa 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 ejecutes el proyecto, verás el botón en la escena cuando se cargue un anuncio recompensado y esté listo para mostrarse.
Configura una devolución de llamada de recompensa para un objeto RewardedAdGameObject
Este es un ejemplo de cómo configurar una devolución de llamada recompensada para una posición de anuncio recompensado, de modo que puedas otorgar una recompensa a un usuario cuando se llame a una función de devolución de llamada.
Crea un nuevo script y define una función que acepte Reward
como parámetro de la siguiente manera.
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 (excepto el GameObject de AdPlacement) en la escena. En este ejemplo, se adjunta al GameObject de la cámara principal.
Agrega un objeto RewardedAdGameObject
a la escena. Luego, en la sección Callbacks del inspector RewardedAdGameObject
, haz clic en el botón + en On User Earned Reward (Reward) para habilitar la función que se llamará cuando se otorgue una recompensa a un usuario.
Arrastra y suelta el objeto de juego Main Camera que agregaste en el paso anterior al campo None (Object). Selecciona una función para llamar desde el menú desplegable. Haz clic en No Function > RewardedTestScript > OnUserEarnedReward.
Una vez que ejecutes el proyecto y mires un anuncio recompensado, se invocará RewardedTestScript.OnUserEarnedReward()
cuando debas recibir una recompensa por interactuar con el anuncio.