Intersticial recompensado (beta)

Selecciona la plataforma: Android iOS Unity Flutter

Los intersticiales recompensados son un tipo de formato de anuncio incentivado que te permite ofrecer recompensas por los anuncios que aparecen automáticamente durante las transiciones naturales de la app. A diferencia de los anuncios recompensados, no se requiere que los usuarios habiliten ninguna función para ver anuncios intersticiales recompensados.

Requisitos previos

Haz siempre una comprobación con anuncios de prueba

El siguiente código de muestra contiene un ID de unidad de anuncios que puedes usar para solicitar anuncios de prueba. Se configuró especialmente para devolver anuncios de prueba en lugar de anuncios de producción para cada solicitud, lo que hace que sea seguro de usar.

Sin embargo, una vez que registres una app en la interfaz web de AdMob y crees IDs de tus propias unidades de anuncios para usarlos en tu app, configura tu dispositivo como dispositivo de prueba de forma explícita durante el desarrollo.

Android

ca-app-pub-3940256099942544/5354046379

iOS

ca-app-pub-3940256099942544/6978759866

Inicializa el SDK de anuncios para dispositivos móviles

Antes de cargar anuncios, llama a MobileAds.Initialize() para que tu app inicialice el SDK de anuncios para dispositivos móviles. Esto solo se debe hacer una vez, idealmente cuando se inicia la app.

using GoogleMobileAds;
using GoogleMobileAds.Api;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    public void Start()
    {
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize((InitializationStatus initStatus) =>
        {
            // This callback is called once the MobileAds SDK is initialized.
        });
    }
}

Si usas la mediación, espera a que se produzca la devolución de llamada antes de cargar anuncios, ya que esto garantizará que se inicialicen todos los adaptadores de mediación.

Implementación

Estos son los pasos principales para integrar anuncios intersticiales recompensados:

  1. Carga el anuncio intersticial recompensado.
  2. [Opcional] Valida las devoluciones de llamada de verificación del servidor (SSV).
  3. Muestra el anuncio intersticial recompensado con la devolución de llamada de la recompensa.
  4. Escucha eventos de anuncios intersticiales recompensados.
  5. Borra el anuncio intersticial recompensado.
  6. Precarga el siguiente anuncio intersticial recompensado.

Carga el anuncio intersticial recompensado

Para cargar un anuncio intersticial recompensado, puedes utilizar el método estático Load() en la clase RewardedInterstitialAd. En particular, el método de carga requiere un ID de unidad de anuncios, un objeto AdRequest y un controlador de finalización al que se llama cuando la carga de anuncios falla o se realiza correctamente. El objeto RewardedInterstitialAd cargado se incluye como parámetro en el controlador de finalización. En el siguiente ejemplo, se muestra cómo cargar un RewardedInterstitialAd.


  // These ad units are configured to always serve test ads.
#if UNITY_ANDROID
  private string _adUnitId = "ca-app-pub-3940256099942544/5354046379";
#elif UNITY_IPHONE
  private string _adUnitId = "ca-app-pub-3940256099942544/6978759866";
#else
  private string _adUnitId = "unused";
#endif

  private RewardedInterstitialAd _rewardedInterstitialAd;

  /// <summary>
  /// Loads the rewarded interstitial ad.
  /// </summary>
  public void LoadRewardedInterstitialAd()
  {
      // Clean up the old ad before loading a new one.
      if (_rewardedInterstitialAd != null)
      {
            _rewardedInterstitialAd.Destroy();
            _rewardedInterstitialAd = null;
      }

      Debug.Log("Loading the rewarded interstitial ad.");

      // create our request used to load the ad.
      var adRequest = new AdRequest();
      adRequest.Keywords.Add("unity-admob-sample");

      // send the request to load the ad.
      RewardedInterstitialAd.Load(_adUnitId, adRequest,
          (RewardedInterstitialAd ad, LoadAdError error) =>
          {
              // if error is not null, the load request failed.
              if (error != null || ad == null)
              {
                  Debug.LogError("rewarded interstitial ad failed to load an ad " +
                                 "with error : " + error);
                  return;
              }

              Debug.Log("Rewarded interstitial ad loaded with response : "
                        + ad.GetResponseInfo());

              _rewardedInterstitialAd = ad;
          });
  }

[Opcional] Valida las devoluciones de llamada de verificación del servidor (SSV)

Las apps que requieren datos adicionales en las devoluciones de llamada de verificación del servidor deberían usar la función de datos personalizados de los anuncios intersticiales recompensados. Todos los valores de cadena establecidos en un objeto de anuncio recompensado se pasan al parámetro de consulta custom_data de la devolución de llamada de SSV. Si no se establece ningún valor de datos personalizados, el valor del parámetro de consulta custom_data no estará presente en la devolución de llamada de SSV.

En la siguiente muestra de código, se muestra cómo establecer las opciones de SSV después de que se carga el anuncio intersticial recompensado.

// send the request to load the ad.
RewardedInterstitialAd.Load(_adUnitId,
                            adRequest,
                            (RewardedInterstitialAd ad, LoadAdError error) =>
    {
        // If the operation failed, an error is returned.
        if (error != null || ad == null)
        {
            Debug.LogError("Rewarded interstitial ad failed to load an ad " +
                           " with error : " + error);
            return;
        }

        // If the operation completed successfully, no error is returned.
        Debug.Log("Rewarded interstitial ad loaded with response : " +
                   ad.GetResponseInfo());
        
        // Create and pass the SSV options to the rewarded ad.
        var options = new ServerSideVerificationOptions
                              .Builder()
                              .SetCustomData("SAMPLE_CUSTOM_DATA_STRING")
                              .Build()
        ad.SetServerSideVerificationOptions(options);
        
});

Si deseas establecer la cadena de recompensa personalizada, debes hacerlo antes de mostrar el anuncio.

Muestra el anuncio intersticial recompensado con la devolución de llamada de la recompensa

Cuando presentes tu anuncio, deberás proporcionar una devolución de llamada para procesar la recompensa destinada al usuario. Los anuncios solo se pueden mostrar una vez por carga. Usa el método CanShowAd() para verificar que el anuncio esté listo para mostrarse.

El siguiente código presenta el mejor método para mostrar un anuncio intersticial recompensado.

public void ShowRewardedInterstitialAd()
{
    const string rewardMsg =
        "Rewarded interstitial ad rewarded the user. Type: {0}, amount: {1}.";

    if (rewardedInterstitialAd != null && rewardedInterstitialAd.CanShowAd())
    {
        rewardedInterstitialAd.Show((Reward reward) =>
        {
            // TODO: Reward the user.
            Debug.Log(String.Format(rewardMsg, reward.Type, reward.Amount));
        });
    }
}

Escucha eventos de anuncios intersticiales recompensados.

Para personalizar aún más el comportamiento de tu anuncio, puedes agregar un hook en varios eventos del ciclo de vida del anuncio. Para escuchar estos eventos, registra un delegado como se muestra a continuación.

private void RegisterEventHandlers(RewardedInterstitialAd ad)
{
    // Raised when the ad is estimated to have earned money.
    ad.OnAdPaid += (AdValue adValue) =>
    {
        Debug.Log(String.Format("Rewarded interstitial ad paid {0} {1}.",
            adValue.Value,
            adValue.CurrencyCode));
    };
    // Raised when an impression is recorded for an ad.
    ad.OnAdImpressionRecorded += () =>
    {
        Debug.Log("Rewarded interstitial ad recorded an impression.");
    };
    // Raised when a click is recorded for an ad.
    ad.OnAdClicked += () =>
    {
        Debug.Log("Rewarded interstitial ad was clicked.");
    };
    // Raised when an ad opened full screen content.
    ad.OnAdFullScreenContentOpened += () =>
    {
        Debug.Log("Rewarded interstitial ad full screen content opened.");
    };
    // Raised when the ad closed full screen content.
    ad.OnAdFullScreenContentClosed += () =>
    {
        Debug.Log("Rewarded interstitial ad full screen content closed.");
    };
    // Raised when the ad failed to open full screen content.
    ad.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("Rewarded interstitial ad failed to open " +
                       "full screen content with error : " + error);
    };
}

Borra el anuncio intersticial recompensado.

Cuando termines de usar un RewardedInterstitialAd, asegúrate de llamar al método Destroy() antes de descartar la referencia correspondiente:

_rewardedInterstitialAd.Destroy();

Esto notifica al complemento que el objeto ya no se usa y que se puede recuperar la memoria que ocupa. No llamar a este evento provoca fugas de memoria.

Precarga el siguiente anuncio intersticial recompensado.

RewardedInterstitialAd es un objeto de un solo uso. Esto significa que, una vez que se muestra un anuncio intersticial recompensado, el objeto no se puede volver a utilizar. Para solicitar otro anuncio intersticial recompensado, debes cargar un nuevo objeto RewardedInterstitialAd.

Para preparar un anuncio intersticial recompensado para la próxima oportunidad de impresión, precarga el anuncio intersticial recompensado una vez que se activen los eventos de anuncio OnAdFullScreenContentClosed o OnAdFullScreenContentFailed.

private void RegisterReloadHandler(RewardedInterstitialAd ad)
{
    // Raised when the ad closed full screen content.
    ad.OnAdFullScreenContentClosed += ()
    {
        Debug.Log("Rewarded interstitial ad full screen content closed.");

        // Reload the ad so that we can show another as soon as possible.
        LoadRewardedInterstitialAd();
    };
    // Raised when the ad failed to open full screen content.
    ad.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("Rewarded interstitial ad failed to open " +
                       "full screen content with error : " + error);

        // Reload the ad so that we can show another as soon as possible.
        LoadRewardedInterstitialAd();
    };
}

Recursos adicionales