Anuncios recompensados

Los anuncios recompensados son aquellos con los que los usuarios pueden interactuar a cambio de recompensas en la app. En esta guía, se muestra cómo integrar anuncios recompensados de AdMob en una app de Unity. Lee algunas historias de éxito del cliente: Caso de éxito 1, Caso de éxito 2.

Prerequisites

  • Complemento para Unity 3.16.0 o versiones posteriores
  • Completa Comenzar. Tu app de Unity ya debería tener importado el complemento de Unity de los anuncios de Google para dispositivos móviles.

Cómo crear un objeto de anuncio recompensado

Los anuncios recompensados se solicitan y se muestran en objetos RewardedAd. El primer paso para mostrar un anuncio recompensado es crear una instancia de un objeto RewardedAd. Para ello, invoca al constructor con el ID de la unidad de anuncios que se usará para cargar el anuncio. Esto se muestra en el siguiente fragmento de código:

Para facilitar la integración de anuncios con Unity Editor, prueba la nueva versión beta de las colocaciones de anuncios.

using UnityEngine.Events;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);
    }
}

Probar siempre con anuncios de prueba

Cuando compiles y pruebes tus apps, asegúrate de usar anuncios de prueba en lugar de anuncios de producción publicados. De lo contrario, podría suspenderse tu cuenta.

La forma más fácil de cargar anuncios de prueba es usar nuestros ID de bloques de anuncios de prueba exclusivos para anuncios recompensados de iOS y Android:

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Se configuraron especialmente para mostrar anuncios de prueba en cada solicitud y puedes usarlos en tus propias apps durante la codificación, las pruebas y la depuración. Solo asegúrate de reemplazarlos con tu propio ID de bloque de anuncios antes de publicar tu app.

Para obtener más información sobre cómo funcionan los anuncios de prueba del SDK de anuncios para dispositivos móviles, consulta Anuncios de prueba.

Carga un anuncio

Para cargar un anuncio recompensado, llama al método loadAd() del objeto RewardedAd. Este método requiere una instancia de AdRequest como argumento.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }
}

Eventos de anuncios

Para personalizar aún más el comportamiento de tu anuncio, puedes incluir varios eventos en el ciclo de vida del anuncio: cargar, abrir, cerrar, etcétera. A fin de detectar estos eventos, registra un delegado para el controlador de eventos adecuado. El evento más importante es OnUserEarnedReward, que se llama cuando el usuario recibe una recompensa por mirar un video. También puedes implementar otros eventos de anuncios, como se muestra a continuación.

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        string adUnitId;
        #if UNITY_ANDROID
            adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

    public void HandleRewardedAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdLoaded event received");
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdOpening event received");
    }

    public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToShow event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdClosed event received");
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }
}

El evento OnUserEarnedReward proporciona argumentos de eventos especiales. Pasa una instancia de Reward con una Type y un Amount que describen el premio que se le da al usuario:

public void HandleUserEarnedReward(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
     MonoBehaviour.print(
          "HandleRewardedAdRewarded event received for "
              + amount.ToString() + " " + type);
}

Eventos de anuncios disponibles

OnAdLoaded
Se invoca cuando un anuncio termina de cargarse.
OnAdFailedToLoad
Se invoca cuando falla la carga de un anuncio. La propiedad Message del AdErrorEventArgs proporcionado describe el tipo de falla que se produjo.
OnAdOpening
Se invoca cuando se muestra el anuncio y abarca la pantalla del dispositivo. Este es un buen lugar para pausar la salida de audio de la app o el bucle de juego si es necesario.
OnAdFailedToShow
Se invoca cuando un anuncio no se muestra. La propiedad Message del AdErrorEventArgs proporcionado describe el tipo de falla que se produjo.
OnUserEarnedReward
Se invoca cuando un usuario debe recibir una recompensa por mirar un video. El parámetro Reward describe la recompensa que se le presentará al usuario.
OnAdClosed
Se invoca cuando el anuncio de video recompensado se cierra debido a que el usuario presiona el ícono de cierre o usa el botón Atrás. Si la app pausó la salida de audio o el bucle de juego, este es un excelente lugar para reanudarla.

Mostrar el anuncio

Antes de mostrar un anuncio recompensado a los usuarios, se les debe ofrecer una opción explícita para ver el contenido del anuncio recompensado a cambio de una recompensa. Los anuncios recompensados siempre deben ser una experiencia de participación.

Para mostrar un anuncio recompensado, verifica el método IsLoaded() a fin de verificar que haya terminado de cargarse y, luego, llama a show(). Este es un ejemplo de cómo hacerlo:

private void UserChoseToWatchAd()
{
  if (this.rewardedAd.IsLoaded()) {
    this.rewardedAd.Show();
  }
}

Usando OnAdClosed para precargar el próximo anuncio recompensado

RewardedAd es un objeto de uso único. Esto significa que, una vez que se muestra un anuncio recompensado, no se puede usar el objeto para cargar otro anuncio. Para solicitar otro anuncio recompensado, deberás crear un nuevo objeto RewardedAd.

Una práctica recomendada es cargar otro anuncio recompensado en el evento de anuncio OnAdClosed para que el próximo anuncio recompensado comience a cargarse apenas se descarte el anterior:

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void CreateAndLoadRewardedAd()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

...

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        this.CreateAndLoadRewardedAd();
    }
}

Cómo cargar varios anuncios recompensados

Para cargar varios anuncios recompensados, siga los pasos que se describen en las secciones sobre cómo crear un objeto de anuncio recompensado y cómo cargar un anuncio para cada anuncio que desea cargar. En el siguiente fragmento de código, se muestra cómo cargar dos anuncios recompensados para dos posiciones de anuncios distintas.

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;
    ...
    public void Start()
    {
        ...

        this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
        this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
    }

    public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
    {
        RewardedAd rewardedAd = new RewardedAd(adUnitId);

        rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        rewardedAd.LoadAd(request);
        return rewardedAd;
    }
}

Ejemplos