Crear un anuncio Interstitial Bonificado con Admob en Flutter

Tiempo de lectura: 2 minutos

Hoy vamos a implementar un anuncio Interstitial Bonificado con Admob en Flutter.

Anuncio interstitial - Google Admob

Lo primero que haremos es crear nuestro componente llamado rewarded_interstitial.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';

class AdRewardedInterstitial {
  static RewardedInterstitialAd? _rewardedAd;

  static Future<bool> initialize() async {
    return await _loadRewardedInterstitialAd();
  }

  static Future<bool> _loadRewardedInterstitialAd() async {
    Completer<bool> completer = Completer<bool>();

    RewardedInterstitialAd.load(
      adUnitId: AdHelper.rewardedAdUnitId,
      request: AdRequest(),
      rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback(
        onAdLoaded: (RewardedInterstitialAd ad) {
          print('Rewarded Ad loaded');
          _rewardedAd = ad;
          completer.complete(
              true); // Completa el Future con true si se carga el anuncio
        },
        onAdFailedToLoad: (LoadAdError error) {
          print('Rewarded Ad failed to load: $error');
          completer.complete(
              false); // Completa el Future con false si falla la carga del anuncio
        },
      ),
    );

    return completer
        .future; // Retorna el Future que será completado en el callback
  }

  static void showRewardedInterstitialAd(
      {required Function onReward, required Function onDimiss}) {
    if (_rewardedAd == null) {
      print('Rewarded Ad not loaded yet.');
      //onDimiss();
      onReward(-1);
      return;
    }

    _rewardedAd!.fullScreenContentCallback = FullScreenContentCallback(
      onAdDismissedFullScreenContent: (Ad ad) {
        print('Rewarded Ad dismissed');
        onDimiss();
        _loadRewardedInterstitialAd(); // Carga un nuevo anuncio después de que el actual se haya mostrado.
      },
    );

    _rewardedAd!.show(
      onUserEarnedReward: (AdWithoutView ad, RewardItem reward) {
        print('User earned reward: ${reward.amount}');
        onReward(reward
            .amount); // Llama al callback cuando el usuario gane una recompensa.
      },
    );
  }

  static void dispose() {
    _rewardedAd?.dispose();
  }
}

class AdHelper {
  static String rewardedAdUnitId = "ca-app-pub-3940256099942544/5354046379"
}

Id de prueba: ca-app-pub-3940256099942544/5354046379

He añadido el ID de prueba, podremos añadir el que necesitemos o hacer una clase que según sea iOS/Android o test nos cargue el ID correspondiente:

import 'dart:io';

const test = true;

String getIdRewardedInterstitial() {
  var adID = "ca-app-pub-3940256099942544/5354046379";
  if (Platform.isAndroid) {
    if (!test) {
      //Anuncios reales
      adID = "tu_id_anuncio_interstitial_bonificado_android";
    } else {
      //Anuncios de test
      adID = "ca-app-pub-3940256099942544/5354046379";
    }
  } else if (Platform.isIOS) {
    if (!test) {
      //Anuncios reales
      adID = "tu_id_anuncio_interstitial_bonificado_iOS";
    } else {
      //Anuncios de test
      adID = "ca-app-pub-3940256099942544/5354046379";
    }
  }
  return adID;
}

Y ahora para utilizar nuestro anuncio haremos esto:

() async {
      await AdRewardedInterstitial.initialize();
      AdRewardedInterstitial.showRewardedInterstitialAd(
        onReward: (value) {
          print('User was rewarded: $value');
  
        },
        onDimiss: () {
          print('User dismissed the ad.');
  
        },
      );
    }();

Deja un comentario