Recompensado

Los anuncios recompensados son aquellos 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 de Flutter.

Siempre prueba con anuncios de prueba

Cuando compiles y pruebes tus apps, asegúrate de usar anuncios de prueba en lugar de anuncios publicados en producción. De lo contrario, podría suspenderse tu cuenta.

La forma más fácil de cargar anuncios de prueba es usar nuestro ID de unidad de anuncios de prueba exclusivo para los anuncios recompensados:

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Las unidades de anuncios de prueba están configuradas para mostrar anuncios de prueba para cada solicitud, y puedes usarlas en tus propias apps mientras codificas, pruebas y depuras. Solo asegúrate de reemplazarlos con tus propios IDs de unidades de anuncios antes de publicar la app.

Carga un anuncio

En el siguiente ejemplo, se carga un anuncio recompensado:

class RewardedExampleState extends State<RewardedExample> {
  RewardedAd? _rewardedAd;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = Platform.isAndroid
    ? 'ca-app-pub-3940256099942544/5224354917'
    : 'ca-app-pub-3940256099942544/1712485313';

  /// Loads a rewarded ad.
  void loadAd() {
    RewardedAd.load(
        adUnitId: adUnitId,
        request: const AdRequest(),
        adLoadCallback: RewardedAdLoadCallback(
          // Called when an ad is successfully received.
          onAdLoaded: (ad) {
            debugPrint('$ad loaded.');
            // Keep a reference to the ad so you can show it later.
            _rewardedAd = ad;
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (LoadAdError error) {
            debugPrint('RewardedAd failed to load: $error');
          },
        ));
  }
}

Eventos de anuncios recompensados

Con el uso de FullScreenContentCallback, puedes escuchar eventos del ciclo de vida, como cuando se muestra o se descarta el anuncio. Configura RewardedAd.fullScreenContentCallback antes de mostrar el anuncio para recibir notificaciones de estos eventos. En este ejemplo, se implementa cada método y se registra un mensaje en la consola:

class RewardedExampleState extends State<RewardedExample> {
  RewardedAd? _rewardedAd;

  // TODO: replace this test ad unit with your own ad unit.
  final adUnitId = Platform.isAndroid
    ? 'ca-app-pub-3940256099942544/5224354917'
    : 'ca-app-pub-3940256099942544/1712485313';

  /// Loads a rewarded ad.
  void loadAd() {
    RewardedAd.load(
        adUnitId: adUnitId,
        request: const AdRequest(),
        adLoadCallback: RewardedAdLoadCallback(
          // Called when an ad is successfully received.
          onAdLoaded: (ad) {
            ad.fullScreenContentCallback = FullScreenContentCallback(
              // Called when the ad showed the full screen content.
              onAdShowedFullScreenContent: (ad) {},
              // Called when an impression occurs on the ad.
              onAdImpression: (ad) {},
              // Called when the ad failed to show full screen content.
              onAdFailedToShowFullScreenContent: (ad, err) {
                // Dispose the ad here to free resources.
                ad.dispose();
              },
              // Called when the ad dismissed full screen content.
              onAdDismissedFullScreenContent: (ad) {
                // Dispose the ad here to free resources.
                ad.dispose();
              },
              // Called when a click is recorded for an ad.
              onAdClicked: (ad) {});

            debugPrint('$ad loaded.');
            // Keep a reference to the ad so you can show it later.
            _rewardedAd = ad;
          },
          // Called when an ad request failed.
          onAdFailedToLoad: (LoadAdError error) {
            debugPrint('RewardedAd failed to load: $error');
          },
        ));
  }
}

Anuncio gráfico

Un RewardedAd se muestra como una superposición sobre todo el contenido de la app y se coloca de forma estática, por lo que no se puede agregar al árbol de widgets de Flutter. Puedes llamar a show() para elegir cuándo mostrar el anuncio. RewardedAd.show() recibe un OnUserEarnedRewardCallback, que se invoca cuando el usuario obtiene una recompensa. Asegúrate de implementar esto y recompensar al usuario por mirar un anuncio.

_rewardedAd.show(onUserEarnedReward: (AdWithoutView ad, RewardItem rewardItem) {
  // Reward the user for watching an ad.
});

Una vez que se llama a show(), un Ad que se muestra de esta manera no se puede quitar de manera programática y requiere la entrada del usuario. Un RewardedAd solo se puede mostrar una vez. Las llamadas posteriores que se muestren activarán onAdFailedToShowFullScreenContent.

Los anuncios se deben desechar cuando ya no se necesita acceso a ellos. La práctica recomendada para determinar cuándo llamar a dispose() se encuentra en las devoluciones de llamada FullScreenContentCallback.onAdDismissedFullScreenContent y FullScreenContentCallback.onAdFailedToShowFullScreenContent.

Listo. La app ya está lista para mostrar anuncios recompensados.

Ejemplo completo en GitHub

Anuncio recompensado