Anuncios recompensados

Los anuncios recompensados son anuncios con los que los usuarios tienen la opción de interactuar a cambio de recompensas en la app. En esta guía, se muestra cómo integrar anuncios recompensados de AdMob en una app para Unity.

Lee algunas historias de éxito de clientes: el caso de éxito 1 y el caso de éxito 2.

En esta guía, se explica cómo integrar anuncios recompensados en una app para Unity.

Requisitos previos

务必用测试广告进行测试

以下示例代码包含一个广告单元 ID,可供您用来请求测试广告。该测试广告单元 ID 已经过专门配置,可为每个请求返回测试广告(而不是实际投放的广告),因此能安全地使用。

不过,在AdMob 网页界面中注册了应用并创建您自己的广告单元 ID 以在应用中使用后,请在开发期间明确将您的设备配置为测试设备

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Inicializa el SDK de anuncios para dispositivos móviles

Antes de cargar anuncios, haz que tu app inicialice el SDK de anuncios para dispositivos móviles llamando a MobileAds.Initialize(). Esto debe hacerse solo 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 mediación, espera hasta que se produzca la devolución de llamada antes de cargar anuncios, ya que esto garantizará que todos los adaptadores de mediación se inicialicen.

Implementación

Los pasos principales para integrar anuncios recompensados son los siguientes:

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

Carga el anuncio recompensado

La carga de un anuncio recompensado se logra usando el método estático Load() en la clase RewardedAd. El objeto RewardedAd cargado se proporciona como parámetro en el controlador de finalización. En el siguiente ejemplo, se muestra cómo cargar un objeto RewardedAd.


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

  private RewardedAd _rewardedAd;

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

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

      // create our request used to load the ad.
      var adRequest = new AdRequest();

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

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

              _rewardedAd = ad;
          });
  }

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

Las aplicaciones que requieren datos adicionales en las devoluciones de llamada de la verificación del servidor deben usar la función de datos personalizados de los anuncios recompensados. Cualquier valor de cadena establecido en un objeto de anuncio recompensado se pasa al parámetro de búsqueda custom_data de la devolución de llamada de SSV. Si no se establece un 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 indica cómo configurar las opciones de SSV después de cargar el anuncio recompensado.

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

    // If the operation completed successfully, no error is returned.
    Debug.Log("Rewarded 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.

Cómo mostrar el anuncio recompensado con una devolución de llamada de recompensa

Cuando presentes tu anuncio, debes proporcionar una devolución de llamada para procesar la recompensa para el 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 recompensado.

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

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

Escucha eventos de anuncios recompensados

Para personalizar aún más el comportamiento de tu anuncio, puedes incluir varios eventos en su ciclo de vida: apertura, cierre, etcétera. Para escuchar estos eventos, registra un delegado, como se muestra a continuación.

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

Cómo borrar el anuncio recompensado

Cuando termines con un RewardedAd, asegúrate de llamar al método Destroy() antes de descartar tu referencia a él:

_rewardedAd.Destroy();

Esto notifica al complemento que el objeto ya no se usa y que la memoria que ocupa se puede reclamar. Si no se llama a este método, se generan fugas de memoria.

Precarga el siguiente anuncio recompensado

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

A fin de preparar un anuncio recompensado para la próxima oportunidad de impresión, precarga el anuncio recompensado una vez que se genere el evento del anuncio OnAdFullScreenContentClosed o OnAdFullScreenContentFailed.

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

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

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

Recursos adicionales