Anuncios de vídeo bonificados (API antigua)

Los anuncios de vídeo bonificados son anuncios de vídeo a pantalla completa que conceden bonificaciones dentro de la aplicación a los usuarios que los ven enteros.

En esta guía te mostramos cómo integrar este tipo de anuncios desde AdMob en una aplicación Unity.

Requisito previo

Completa la guía Primeros pasos. Tu aplicación Unity ya debería tener importado el complemento para Unity de anuncios de Google para móviles.

Obtener una referencia a una instancia singleton

El primer paso para mostrar un anuncio de vídeo bonificado es obtener una referencia a la instancia singleton RewardBasedVideoAd. Para ello, debes llamar a RewardBasedVideoAd.Instance.

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        #if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
            string appId = "unexpected_platform";
        #endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    }
}

Cargar anuncios

Como RewardedBasedVideoAd es un singleton, las solicitudes para cargar anuncios deben hacerse mediante una instancia compartida.

Se recomienda encarecidamente llamar a LoadAd() lo antes posible (por ejemplo, en el método Start() de una secuencia de comandos adjunta a un objeto GameObject) para permitir que los vídeos se precarguen, como se muestra a continuación:

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        #if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
            string appId = "unexpected_platform";
        #endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #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

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

Comprobar siempre las aplicaciones con anuncios de prueba

El código de ejemplo anterior contiene un ID de bloque que puedes usar libremente para solicitar anuncios. Está especialmente configurado para devolver anuncios de prueba en vez de anuncios de producción, por lo que es seguro utilizarlo.

Sin embargo, después de registrar una aplicación en la interfaz de AdMob y crear tus propios ID de bloque de anuncios para usarlos en dicha aplicación, tendrás que configurar tu dispositivo como un dispositivo de prueba durante la fase de desarrollo. Es extremadamente importante que lo hagas, ya que las pruebas con anuncios reales (aunque nunca los toques) están prohibidas por la política de AdMob y pueden provocar la suspensión de tu cuenta. Consulta la guía Anuncios de prueba para saber cómo recibir siempre anuncios de prueba durante la fase de desarrollo.

Eventos de anuncio

Para personalizar todavía más el comportamiento de tu anuncio, puedes incorporar varios eventos a su ciclo de vida (como a la carga, la apertura o el cierre). Para detectar estos eventos, registra un delegado para el EventHandler adecuado. El evento más importante es OnAdRewarded, al que se llama cuando el usuario debe recibir una recompensa por ver un vídeo. También puedes implementar otros eventos de anuncio, como se muestra a continuación:

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when an ad is shown.
        rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
        // Called when the ad starts to play.
        rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
        // Called when the user should be rewarded for watching a video.
        rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
        // Called when the ad click caused the user to leave the application.
        rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #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

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

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

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

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

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

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

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

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

El evento OnAdRewarded contiene argumentos de evento especiales. Transmite una instancia Reward con un elemento Type y otro Amount que describen la bonificación concedida al usuario:

public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    print("User rewarded with: " + amount.ToString() + " " + type);
}

El evento OnAdFailedToLoad también contiene argumentos de evento especiales. Concretamente, transmite una instancia de HandleAdFailedToLoadEventArgs con Message, que describe el error:

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
  print("Rewarded video ad failed to load: " + args.Message);
  // Handle the ad failed to load event.
}
Evento de anuncioDescripción
OnAdLoaded El evento OnAdLoaded se invoca cuando un anuncio se ha terminado de cargar.
OnAdFailedToLoad El evento OnAdFailedToLoad se invoca cuando un anuncio no se puede cargar. El parámetro Message describe el tipo de error que se ha producido.
OnAdOpening Este método se invoca cuando el anuncio mostrado ocupa toda la pantalla del dispositivo. Si utilizas un paquete de analíticas para hacer un seguimiento de los clics, este es un buen lugar para registrar uno.
OnAdStarted Este método se invoca cuando el anuncio comienza a reproducirse.
OnAdRewarded Este método se invoca cuando hay que conceder una bonificación a un usuario porque ha visto un vídeo. El parámetro Reward describe la bonificación que debe recibir el usuario.
OnAdClosed Este método se invoca cuando el anuncio de vídeo bonificado se cierra debido a que el usuario toca el icono de cerrar o el botón para volver atrás. Si la aplicación pausa la salida de audio o el bucle del juego, este es un buen lugar para reanudarlos.
OnAdLeavingApplication Este método se invoca después de OnAdOpened, cuando un usuario hace clic y abre otra aplicación (como Google Play Store), y deja en segundo plano la aplicación actual.

Mostrar anuncios

Antes de mostrar un anuncio bonificado a los usuarios, debes ofrecerles explícitamente la posibilidad de elegir si quieren ver este tipo de contenido publicitario a cambio de una bonificación. Estos anuncios siempre deben ser una experiencia que los usuarios elijan de forma voluntaria.

Para mostrar un anuncio de vídeo bonificado, utiliza el método IsLoaded() para verificar que ha terminado de cargarse y, después, llama a Show().

En el siguiente fragmento de código se indica cómo mostrar un anuncio de vídeo bonificado.

private void UserOptToWatchAd()
{
  if (rewardBasedVideo.IsLoaded()) {
    rewardBasedVideo.Show();
  }
}

Volver a cargar un anuncio

El evento OnAdClosed es un lugar muy práctico para cargar un nuevo anuncio de vídeo bonificado después de mostrar el anterior:

public void Start()
{
    this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
}

public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
{
    this.RequestRewardBasedVideo();
}

Otros recursos

Ejemplos

Pasos siguientes

  • Crea tu propio bloque de anuncios de vídeo bonificados en la interfaz de AdMob.
  • Prueba otros formatos de anuncio: