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 apps para Android y iOS con el SDK de C++ de anuncios de Google para dispositivos móviles.
También encontrarás algunas historias de éxito de clientes: caso de éxito 1 y caso de éxito 2.
Requisitos previos
- Completar la sección Comenzar
- (Solo para Android) Familiaridad con el trabajo con referencias de JNI
jobject
(consulta las sugerencias de JNI de Android).
Siempre haz pruebas con anuncios de prueba
Al compilar y verificar tus apps, asegúrate de usar anuncios de prueba en vez de anuncios activos en fase de producción. De lo contrario, podría suspenderse tu cuenta.
La forma más sencilla de cargar anuncios de prueba es usar nuestro ID de unidad de anuncios de prueba exclusivo para los 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 especialmente para devolver anuncios de prueba en cada solicitud, y puedes usarlos en tus propias apps mientras realizas tus tareas de programación, prueba y depuración. Solo asegúrate de reemplazarlo por tu propio ID de unidad de anuncios antes de publicar tu app.
Consulta la página Habilita los anuncios de prueba para obtener más información sobre cómo funcionan esos anuncios del SDK de anuncios para dispositivos móviles.
Implementación
Estos son los pasos principales para integrar anuncios recompensados:
- Carga un anuncio.
- Regístrate para recibir devoluciones de llamada.
- Muestra el anuncio y controla 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
.
Agrega el siguiente encabezado al código C++ de tu app:
#include "firebase/gma/rewarded_ad.h"
Declara y crea una instancia de un objeto
RewardedAd
:firebase::gma::RewardedAd* rewarded_ad; rewarded_ad = new firebase::gma::RewardedAd();
Inicializa la instancia de
RewardedAd
con la vista principal convertida en un tipoAdParent
. La vista principal es una referenciajobject
de JNI a unActivity
de Android o un puntero a unUIView
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);
Como alternativa a conservar el futuro como una variable, puedes verificar periódicamente el estado de la operación de inicialización invocando
InitializeLastResult()
en el objetoRewardedAd
. Esto puede ser útil para hacer un seguimiento del proceso de inicialización en tu 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 Usa Futures para supervisar el estado de finalización de las llamadas a métodos.
Carga un anuncio
Para cargar un anuncio, se usa el método LoadAd()
en un objeto RewardedAd
. El método de carga requiere que hayas inicializado el objeto RewardedAd
y que tengas tu ID de unidad de anuncios y un objeto AdRequest
. Se devuelve un 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 se inicializó correctamente el objeto RewardedAd
:
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 los eventos de ciclo de vida y presentación de anuncios recompensados. 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 correctamente o con errores, así como cuando se descarte.
En el siguiente código, se 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 un solo uso. 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 siguiente anuncio recompensado comience a cargarse en cuanto se descarte el anterior.
Muestra el anuncio y controla el evento de recompensa
Antes de mostrarles a los usuarios un anuncio recompensado, debes darles una opción explícita para que puedan elegir si quieren ver el contenido del anuncio a cambio de la recompensa. Los anuncios recompensados siempre deben ser una experiencia opcional.
Cuando presentes tu anuncio, deberás proporcionar un objeto UserEarnedReward
para controlar la recompensa destinada al 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 anuncios de Google para dispositivos móviles completa el
firebase::Future
que devolvió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 los anuncios después de que se complete la inicialización del SDK. Aun si una red de mediación no está lista, el SDK de anuncios de Google para dispositivos móviles en C++ le solicitará un anuncio. Por lo tanto, si una red de mediación termina de inicializarse después de transcurrido el tiempo de espera, igualmente podrá procesar solicitudes de anuncios futuras durante esa sesión.
Si llamas a
GetInitializationStatus()
, puedes seguir sondeando el estado de inicialización de todos los adaptadores durante la sesión de tu app.- ¿Cómo se puede saber por qué una red de mediación en particular no está lista?
AdapterStatus.description()
describe por qué un adaptador no está listo para procesar solicitudes de anuncios. Consulta el código fuente de nuestra app de inicio rápido de ejemplo en GitHub para ver un ejemplo del registro del estado del adaptador de mediación.
Recursos adicionales
Ejemplo en GitHub
- Consulta el código fuente de nuestra app de inicio rápido de ejemplo en GitHub.