Anuncios recompensados

Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

Los anuncios recompensados les permiten a los usuarios interactuar con ellos a cambio de recompensas en la aplicación. En esta guía, se muestra cómo integrar anuncios recompensados en aplicaciones para iOS y Android mediante el SDK de C++ de anuncios de Google para dispositivos móviles.

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

Requisitos previos

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 nuestro ID de bloque de anuncios de prueba dedicado para anuncios recompensados, que varía según la plataforma del dispositivo:

  • Android: ca-app-pub-3940256099942544/5224354917
  • iOS: ca-app-pub-3940256099942544/1712485313

Se configuraron de manera especial a fin de mostrar anuncios de prueba para cada solicitud y puedes usarla en tus propias apps mientras codificas, pruebas y depuras. Solo asegúrate de reemplazarlo 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 móviles, consulta Anuncios de prueba.

Implementación

Los pasos principales para integrar anuncios recompensados son los siguientes:

  1. Cargue un anuncio.
  2. Regístrate para recibir devoluciones de llamada.
  3. Muestre el anuncio y maneje el evento de recompensa.

Configura un RewardedAd

Los anuncios recompensados se muestran en objetos RewardedAd, por lo que el primer paso para integrar anuncios recompensados en tu app es crear e inicializar una instancia de RewardedAd.

  1. Agrega el siguiente encabezado al código C++ de tu app:

     #include "firebase/gma/rewarded_ad.h"
    

  2. Declara un objeto RewardedAd y crea una instancia de él:

     firebase::gma::RewardedAd* rewarded_ad;
     rewarded_ad = new firebase::gma::RewardedAd();
    

  3. Inicializa la instancia RewardedAd con tu transmisión de vistas superior a un tipo AdParent. La vista principal es una referencia jobject de JNI a un Activity de Android o un puntero a un UIView de iOS.

    // my_ad_parent is a jobject reference to an Android Activity or
    // a pointer to an iOS UIView.
    firebase::gma::AdParent ad_parent =
      static_cast<firebase::gma::AdParent>(my_ad_parent);
    firebase::Future<void> result = rewarded_ad->Initialize(ad_parent);
    
  4. Como alternativa a la retención del futuro como variable, puedes verificar de forma periódica el estado de la operación de inicialización si invocas InitializeLastResult() en el objeto RewardedAd. Esto puede ser útil para realizar un seguimiento del proceso de inicialización en el bucle de juego global.

    // Monitor the status of the future in your game loop:
    firebase::Future<void> result = rewarded_ad->InitializeLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      // Initialization completed.
      if(future.error() == firebase::gma::kAdErrorCodeNone) {
        // Initialization successful.
      } else {
        // An error has occurred.
      }
    } else {
      // Initialization on-going.
    }
    

Para obtener más información sobre cómo trabajar con firebase::Future, consulta Cómo usar interfaces Future para supervisar el estado de las llamadas al método.

Cargar un anuncio

Para cargar un anuncio, debes usar el método LoadAd() en un objeto RewardedAd. El método de carga requiere que hayas inicializado el objeto RewardedAd y que tengas el ID de tu bloque de anuncios y un objeto AdRequest. Se muestra una firebase::Future que puedes usar para supervisar el estado y el resultado de la operación de carga.

En el siguiente código, se muestra cómo cargar un anuncio una vez que RewardedAd se inicializó correctamente:

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = rewarded_ad->LoadAd(rewarded_ad_unit_id, ad_request);

Regístrate para recibir devoluciones de llamada

Debes extender la clase FullScreenContentListener para recibir notificaciones de presentaciones de anuncios recompensados y eventos del ciclo de vida. Tu subclase FullScreenContentListener personalizada se puede registrar a través del método RewardedAd::SetFullScreenContentListener() y recibirá devoluciones de llamada cuando el anuncio se presente de forma correcta o no, así como cuando se descarte.

El siguiente código muestra cómo extender la clase y asignarla al anuncio:

  class ExampleFullScreenContentListener
      : public firebase::gma::FullScreenContentListener {

   public:
    ExampleFullScreenContentListener() {}

    void OnAdClicked() override {
      // This method is invoked when the user clicks the ad.
    }

    void OnAdDismissedFullScreenContent() override {
     // This method is invoked when the ad dismisses full screen content.
    }

    void OnAdFailedToShowFullScreenContent(const AdError& error) override {
      // This method is invoked when the ad failed to show full screen content.
      // Details about the error are contained within the AdError parameter.
    }

    void OnAdImpression() override {
      // This method is invoked when an impression is recorded for an ad.
    }

    void OnAdShowedFullScreenContent() override {
      // This method is invoked when the ad showed its full screen content.
    }
  };

  ExampleFullScreenContentListener* example_full_screen_content_listener =
    new ExampleFullScreenContentListener();
  rewarded_ad->SetFullScreenContentListener(example_full_screen_content_listener);

RewardedAd es un objeto de uso único. Esto significa que, una vez que se muestra un anuncio recompensado, no se puede volver a mostrar. Una práctica recomendada es cargar otro anuncio recompensado en el método OnAdDismissedFullScreenContent() de tu FullScreenContentListener para que el próximo anuncio recompensado comience a cargarse apenas se descarte el anterior.

Cómo mostrar el anuncio y administrar el evento de recompensa

Antes de mostrar un anuncio recompensado a los usuarios, debes ofrecerles una opción explícita para que vean el contenido del anuncio recompensado a cambio de una recompensa. Los anuncios recompensados siempre deben ser una experiencia de participación.

Cuando presentas tu anuncio, debes proporcionar un objeto UserEarnedReward a fin de procesar la recompensa para el usuario.

En el siguiente código, se muestra cómo mostrar un RewardedAd:

// A simple listener track UserEarnedReward events.
class ExampleUserEarnedRewardListener :
    public firebase::gma::UserEarnedRewardListener {
 public:
   ExampleUserEarnedRewardListener() { }

  void OnUserEarnedReward(const firebase::gma::AdReward& reward) override {
    // Reward the user!
  }
};

ExampleUserEarnedRewardListener* user_earned_reward_listener =
  new ExampleUserEarnedRewardListener();
firebase::Future<void> result = rewarded_ad->Show(user_earned_reward_listener);

Preguntas frecuentes

¿Hay un tiempo de espera para la llamada de inicialización?
Después de 10 segundos, el SDK de C++ de los anuncios móviles de Google completa el firebase::Future que muestra Initialize(), incluso si una red de mediación aún no completó la inicialización.
¿Qué sucede si algunas redes de mediación no están listas cuando recibo la devolución de llamada de inicialización?

Se recomienda cargar anuncios después de que se completa la inicialización del SDK. Incluso si una red de mediación no está lista, el SDK de C++ de los anuncios móviles de Google seguirá pidiendo un anuncio a esa red. Por lo tanto, si una red de mediación termina de inicializarse después del tiempo de espera, aún puede atender solicitudes de anuncios futuras en esa sesión.

Puedes continuar consultando el estado de inicialización de todos los adaptadores durante la sesión de tu app llamando a GetInitializationStatus().

¿Cómo puedo averiguar por qué una red de mediación específica no está lista?

AdapterStatus.description() describe por qué un adaptador no está listo para atender solicitudes de anuncios. Consulta el código fuente de nuestra app de inicio rápido de ejemplo en GitHub para ver un ejemplo de registro del estado del adaptador de mediación.

Recursos adicionales

Ejemplo en GitHub