Usar la función de emplazamientos publicitarios

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

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.
  • 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:

  1. Crea una función compatible con la retrollamada de anuncios.

    public void OnBannerAdFailedToLoad(string reason) {
        Debug.Log("Banner ad failed to load: " + reason);
    }
    
  2. Adjunta la secuencia de comandos que contiene la función anterior a cualquier GameObject de la escena.

  3. Haz clic en el botón + y, a continuación, arrastra y suelta el GameObject al que has asociado la secuencia de comandos.

  4. 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:

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.

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.