Cómo agregar anuncios de AdMob a una app creada con Flutter

1. Introducción

Qué compilarás

En este codelab, te guiaremos para agregar anuncios banner, intersticiales y recompensados a una app llamada Awesome Drawing Quiz, un juego en el que los participantes deben adivinar el nombre de un dibujo.

Si experimentas algún problema (como errores de código o gramaticales, o el uso de lenguaje poco claro) mientras trabajas en este codelab, notifícalo a través del vínculo Informar un error, disponible en la esquina inferior izquierda del codelab.

Qué aprenderás

  • Cómo configurar el complemento de Google Mobile Ads para AdMob
  • Cómo implementar anuncios banner, intersticiales y recompensados en una app creada con Flutter

Otros requisitos

  • Android Studio 4.1 o una versión posterior
  • Xcode 12 o una versión posterior (para el desarrollo de iOS)

¿Cómo calificarías tu nivel de experiencia con AdMob?

Principiante Intermedio Avanzado

¿Cómo calificarías tu nivel de experiencia con Flutter?

Principiante Intermedio Avanzado

2. Configura tu entorno de desarrollo de Flutter

Para completar este lab, necesitas dos software: el SDK de Flutter y un editor.

Puedes ejecutar el codelab con cualquiera de estos dispositivos o modalidades:

  • Un dispositivo físico Android o iOS conectado a tu computadora y configurado en el Modo de desarrollador
  • El simulador de iOS (requiere instalar las herramientas de Xcode)
  • Android Emulator (requiere configuración en Android Studio)
  • Un navegador (se requiere Chrome para la depuración)
  • Como una app para computadoras con Windows, Linux o macOS (Debes desarrollar la app en la plataforma donde tengas pensado implementarla. Por ejemplo, si deseas desarrollar una app de escritorio para Windows, debes hacerlo en ese sistema operativo para obtener acceso a la cadena de compilación adecuada. Encuentra detalles sobre los requisitos específicos de cada sistema operativo en docs.flutter.dev/desktop)

Descarga el código

Tras descargar el archivo ZIP, extrae su contenido. Se creará una carpeta llamada admob-ads-in-flutter-master.

Como alternativa, puedes clonar el repositorio de GitHub con la siguiente línea de comandos:

$ git clone https://github.com/googlecodelabs/admob-ads-in-flutter

El repositorio incluye dos carpetas:

  • android_studio_folder.pngstarter: Código inicial que compilarás en este codelab
  • android_studio_folder.pngcomplete: Código completo para este codelab

3. Configura la app y las unidades de anuncios de AdMob

Como Flutter es un SDK multiplataforma, debes agregar una app y unidades de anuncios para Android y para iOS en AdMob.

Configuración para Android

Para la configuración para Android, debes agregar una app para Android y crear unidades de anuncios.

Agrega una app para Android

  1. En la consola de AdMob, haz clic en AGREGAR APLICACIÓN, en el menú Aplicaciones.
  2. Cuando se te pregunte si publicaste tu app en Google Play o el App Store, haz clic en NO.
  3. Ingresa Awesome Drawing Quiz en el campo del nombre de la app y selecciona Android como la plataforma.

ddafee37a6f92229.png

  1. No es necesario habilitar las métricas del usuario para completar este codelab. Sin embargo, recomendamos hacerlo porque permite comprender el comportamiento de los usuarios en más detalle. Haz clic en AGREGAR (ADD) para completar el proceso.

b918bf44362813a9.png

Crea unidades de anuncios

Para comenzar a agregar unidades de anuncios a AdMob, sigue estos pasos:

  1. Selecciona Awesome Drawing Quiz en el menú Aplicaciones de la consola de AdMob.
  2. Haz clic en el menú Unidades de anuncios.

Banner

  1. Haz clic en el botón AGREGAR UNIDAD DE ANUNCIOS.
  2. Selecciona Banner como el formato.
  3. Ingresa android-adq-banner en el campo Nombre de la unidad de anuncios.
  4. Haz clic en CREAR UNIDAD DE ANUNCIOS para completar el proceso.

Anuncio intersticial

  1. Haz clic en el botón AGREGAR UNIDAD DE ANUNCIOS.
  2. Selecciona Intersticial como el formato.
  3. Ingresa android-adq-interstitial en el campo Nombre de la unidad de anuncios.
  4. Haz clic en CREAR UNIDAD DE ANUNCIOS para completar el proceso.

Anuncio recompensado

  1. Haz clic en el botón AGREGAR UNIDAD DE ANUNCIOS.
  2. Selecciona Recompensado como el formato.
  3. Ingresa android-adq-rewarded en el campo Nombre de la unidad de anuncios.
  4. En Configuración de la recompensa, deja los ajustes predeterminados.
  5. Haz clic en CREAR UNIDAD DE ANUNCIOS para completar el proceso.

Las unidades de anuncios nuevas suelen demorar algunas horas en comenzar a publicar anuncios.

Si deseas evaluar el comportamiento de los anuncios de inmediato, utiliza el ID de app y los IDs de unidades de anuncios de prueba que se mencionan en las tablas correspondientes para Android y para iOS.

Configuración para iOS

Para la configuración para iOS, debes agregar una app para iOS y crear unidades de anuncios.

Agrega una app para iOS

  1. En la consola de AdMob, haz clic en AGREGAR APLICACIÓN, en el menú Aplicaciones.
  2. Cuando se te pregunte si publicaste tu app en Google Play o el App Store, haz clic en NO.
  3. Ingresa Awesome Drawing Quiz en el campo del nombre de la app y selecciona iOS como la plataforma.

93e7f9f114232402.png

  1. No es necesario habilitar las métricas del usuario para completar este codelab. Sin embargo, recomendamos hacerlo porque permite comprender el comportamiento de los usuarios en más detalle. Haz clic en AGREGAR (ADD) para completar el proceso.

b918bf44362813a9.png

Crea unidades de anuncios

Para agregar unidades de anuncios, sigue estos pasos:

  1. Selecciona la app de Awesome Drawing Quiz en el menú Aplicaciones de la consola de AdMob.
  2. Haz clic en el menú Unidades de anuncios.

Banner

  1. Haz clic en el botón AGREGAR UNIDAD DE ANUNCIOS.
  2. Selecciona Banner como el formato.
  3. Ingresa ios-adq-banner en el campo Nombre de la unidad de anuncios.
  4. Haz clic en CREAR UNIDAD DE ANUNCIOS para completar el proceso.

Anuncio intersticial

  1. Haz clic en el botón AGREGAR UNIDAD DE ANUNCIOS.
  2. Selecciona Intersticial como el formato.
  3. Ingresa ios-adq-interstitial en el campo Nombre de la unidad de anuncios.
  4. Haz clic en CREAR UNIDAD DE ANUNCIOS para completar el proceso.

Anuncio recompensado

  1. Haz clic en el botón AGREGAR UNIDAD DE ANUNCIOS.
  2. Selecciona Recompensado como el formato.
  3. Ingresa ios-adq-rewarded en el campo Nombre de la unidad de anuncios.
  4. En Configuración de la recompensa, deja los ajustes predeterminados.
  5. Haz clic en CREAR UNIDAD DE ANUNCIOS para completar el proceso.

Las unidades de anuncios nuevas suelen demorar algunas horas en comenzar a publicar anuncios.

Si deseas evaluar el comportamiento de los anuncios de inmediato, utiliza el ID de app y los IDs de unidades de anuncios de prueba que se mencionan en la siguiente tabla.

Opcional: Utiliza la app y las unidades de anuncios de AdMob de prueba

Si deseas seguir el codelab en lugar de crear una app y unidades de anuncios nuevas por tu cuenta, utiliza el ID de app y los IDs de unidades de anuncios de AdMob de prueba que se mencionan en las siguientes tablas.

ID de app/IDs de unidades de anuncios para Android

Elemento

ID de app/IDs de unidades de anuncios

ID de la app de AdMob

ca-app-pub-3940256099942544~3347511713

Banner

ca-app-pub-3940256099942544/6300978111

Anuncio intersticial

ca-app-pub-3940256099942544/1033173712

Anuncio recompensado

ca-app-pub-3940256099942544/5224354917

ID de app/IDs de unidades de anuncios para iOS

Elemento

ID de app/IDs de unidades de anuncios

ID de la app de AdMob

ca-app-pub-3940256099942544~1458002511

Banner

ca-app-pub-3940256099942544/2934735716

Anuncio intersticial

ca-app-pub-3940256099942544/4411468910

Anuncio recompensado

ca-app-pub-3940256099942544/1712485313

Consulta la documentación para desarrolladores Anuncios de prueba para Android y Anuncios de prueba para iOS para obtener más información al respecto.

4. Agrega el complemento de Google Mobile Ads para Flutter

Flutter utiliza complementos para proporcionar acceso a una amplia variedad de servicios específicos según la plataforma. Los complementos te permiten acceder a los servicios y las APIs de cada plataforma.

El complemento google_mobile_ads admite la carga y visualización de anuncios banner, intersticiales, recompensados y nativos a través de la API de AdMob.

Como Flutter es un SDK multiplataforma, el complemento google_mobile_ads se puede aplicar a Android y a iOS. Por lo tanto, si agregas el complemento a tu app creada con Flutter, se utilizará en las versiones para Android y para iOS de la app de anuncios intercalados de AdMob.

Agrega el complemento de Google Mobile Ads como dependencia

Para acceder a las APIs de AdMob desde el proyecto de anuncios intercalados de AdMob, agrega google_mobile_ads como dependencia del archivo pubspec.yaml ubicado en la raíz del proyecto.

pubspec.yaml

...
environment:
  # TODO: Update the minimum sdk version to 2.12.0 to support null safety.
  sdk: ">=2.17.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  google_fonts: ^3.0.1

  # TODO: Add google_mobile_ads as a dependency
  google_mobile_ads: ^1.2.0

...

Haz clic en Pub get para instalar el complemento en el proyecto de Awesome Drawing Quiz.

9ce73858eedbd8fc.png

Actualiza el archivo AndroidManifest.xml (Android)

  1. Abre el archivo android/app/src/main/AndroidManifest.xml en Android Studio.
  2. Agrega el ID de la app de AdMob. Para ello incluye una etiqueta <meta-data> con el nombre com.google.android.gms.ads.APPLICATION_ID. Por ejemplo, si el ID de tu app de AdMob es ca-app-pub-3940256099942544~3347511713, debes agregar las siguientes líneas al archivo AndroidManifest.xml.

AndroidManifest.xml

<manifest>
    ...
    <application>
       ...
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-3940256099942544~3347511713"/>
    </application>

</manifest>

Actualiza el archivo Info.plist (iOS)

  1. Abre el archivo ios/Runner/Info.plist en Android Studio.
  2. Agrega una clave GADApplicationIdentifier con el valor de cadena del ID de tu app de AdMob. Por ejemplo, si el ID de tu app de AdMob es ca-app-pub-3940256099942544~1458002511, debes agregar las siguientes líneas al archivo Info.plist.

ios/Runner/Info.plist

...
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
...

5. Agrega una clase auxiliar para los anuncios

Crea un nuevo archivo llamado ad_helper.dart en el directorio lib. Luego implementa la clase AdHelper, que proporciona el ID de app y los IDs de unidades de anuncios de AdMob para Android y para iOS.

Asegúrate de reemplazar el ID de app (ca-app-pub-xxxxxx~yyyyy) y el ID de unidad de anuncios (ca-app-pub-xxxxxxx/yyyyyyyy) de AdMob por los IDs que creaste en el paso anterior.

lib/ad_helper.dart

import 'dart:io';

class AdHelper {

  static String get bannerAdUnitId {
    if (Platform.isAndroid) {
      return '<YOUR_ANDROID_BANNER_AD_UNIT_ID>';
    } else if (Platform.isIOS) {
      return '<YOUR_IOS_BANNER_AD_UNIT_ID>';
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }

  static String get interstitialAdUnitId {
    if (Platform.isAndroid) {
      return '<YOUR_ANDROID_INTERSTITIAL_AD_UNIT_ID>';
    } else if (Platform.isIOS) {
      return '<YOUR_IOS_INTERSTITIAL_AD_UNIT_ID>';
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }

  static String get rewardedAdUnitId {
    if (Platform.isAndroid) {
      return '<YOUR_ANDROID_REWARDED_AD_UNIT_ID>';
    } else if (Platform.isIOS) {
      return '<YOUR_IOS_REWARDED_AD_UNIT_ID>';
    } else {
      throw UnsupportedError('Unsupported platform');
    }
  }
}

Utiliza el siguiente fragmento de código si deseas usar el ID de app y los IDs de unidades de anuncios de AdMob de prueba.

lib/ad_helper.dart

import 'dart:io';

class AdHelper {

  static String get bannerAdUnitId {
    if (Platform.isAndroid) {
      return 'ca-app-pub-3940256099942544/6300978111';
    } else if (Platform.isIOS) {
      return 'ca-app-pub-3940256099942544/2934735716';
    } else {
      throw new UnsupportedError('Unsupported platform');
    }
  }

  static String get interstitialAdUnitId {
    if (Platform.isAndroid) {
      return "ca-app-pub-3940256099942544/1033173712";
    } else if (Platform.isIOS) {
      return "ca-app-pub-3940256099942544/4411468910";
    } else {
      throw new UnsupportedError("Unsupported platform");
    }
  }

  static String get rewardedAdUnitId {
    if (Platform.isAndroid) {
      return "ca-app-pub-3940256099942544/5224354917";
    } else if (Platform.isIOS) {
      return "ca-app-pub-3940256099942544/1712485313";
    } else {
      throw new UnsupportedError("Unsupported platform");
    }
  }
}

6. Inicializa el SDK de anuncios de Google para dispositivos móviles

Antes de cargar los anuncios, debes inicializar el SDK de anuncios de Google para dispositivos móviles. Abre el archivo lib/home_route.dart y modifica _initGoogleMobileAds() para inicializar el SDK antes de que se cargue la página principal.

Ten presente que debes cambiar el tipo de datos que se muestra en el método _initGoogleMobileAds() de Future<dynamic> a Future<InitializationStatus> para obtener el resultado de la inicialización del SDK después de que se complete.

home_route.dart

// TODO: Import google_mobile_ads.dart
import 'package:google_mobile_ads/google_mobile_ads.dart';

import 'package:flutter/material.dart';

...

class HomeRoute extends StatelessWidget {

  ...

  Future<InitializationStatus> _initGoogleMobileAds() {
    // TODO: Initialize Google Mobile Ads SDK
    return MobileAds.instance.initialize();
  }
}

7. Agrega un anuncio banner

En esta sección, aprenderás a mostrar un anuncio banner en la parte superior de la pantalla del juego, tal como se ilustra en la siguiente captura de pantalla.

276b4cfa283ea6c7.png

  1. Abre el archivo lib/game_route.dart y, luego, importa ad_manager.dart.
  2. Importa ad_helper.dart y google_mobile_ads.dart agregando las siguientes líneas:

lib/game_route.dart

...

// TODO: Import ad_helper.dart
import 'package:awesome_drawing_quiz/ad_helper.dart';

// TODO: Import google_mobile_ads.dart
import 'package:google_mobile_ads/google_mobile_ads.dart';

class GameRoute extends StatefulWidget {
  ...
}
  1. En la clase _GameRouteState, agrega los siguientes miembros de un anuncio banner.

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  // TODO: Add _bannerAd
  BannerAd? _bannerAd;

  ...
}
  1. En el método initState(), crea y carga un anuncio banner (BannerAd) para el tamaño de 320 × 50 (AdSize.banner). Ten presente que se configurará un objeto de escucha de eventos de anuncios para actualizar la IU (setState()) cuando se cargue un anuncio.

lib/game_route.dart

@override
void initState() {
  ...

  // TODO: Load a banner ad
  BannerAd(
    adUnitId: AdHelper.bannerAdUnitId,
    request: AdRequest(),
    size: AdSize.banner,
    listener: BannerAdListener(
      onAdLoaded: (ad) {
        setState(() {
          _bannerAd = ad as BannerAd;
        });
      },
      onAdFailedToLoad: (ad, err) {
        print('Failed to load a banner ad: ${err.message}');
        ad.dispose();
      },
    ),
  ).load();
}
  1. Modifica el método build() para mostrar un anuncio banner cuando haya uno disponible.

lib/game_route.dart

@override
Widget build(BuildContext context) {
  return Scaffold(
    ...
    body: SafeArea(
      child: Stack(
        children: [
          Center(
            ...
          ),
          // TODO: Display a banner when ready
          if (_bannerAd != null)
            Align(
              alignment: Alignment.topCenter,
              child: Container(
                width: _bannerAd!.size.width.toDouble(),
                height: _bannerAd!.size.height.toDouble(),
                child: AdWidget(ad: _bannerAd!),
              ),
            ),
        ],
      ),
    ),
    ...
  );
}
  1. Libera el recurso asociado con el objeto BannerAd. Para ello, llama al método BannerAd.dispose() en el método de devolución de llamada dispose().

lib/game_route.dart

@override
void dispose() {
  // TODO: Dispose a BannerAd object
  _bannerAd?.dispose();

  ...

  super.dispose();
}

Eso es todo. Ejecuta el proyecto y comienza un nuevo juego. Después de que se cargue un anuncio, verás un banner en la parte superior de la pantalla.

276b4cfa283ea6c7.png

8. Agrega un anuncio intersticial

En esta sección, aprenderás a mostrar un anuncio intersticial una vez finalizado el juego (5 niveles en total).

  1. Abre el archivo lib/game_route.dart.
  2. En la clase _GameRouteState, agrega los siguientes miembros y métodos de un anuncio intersticial.

Ten presente que se configurará un objeto de escucha de eventos de anuncios para comprobar si el anuncio está listo (onAdLoaded() y onAdFailedToLoad()) y mostrar la pantalla principal de la app cuando se cierre dicho anuncio (onAdDismissedFullScreenContent()).

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  // TODO: Add _interstitialAd
 InterstitialAd? _interstitialAd;

  // TODO: Implement _loadInterstitialAd()
  void _loadInterstitialAd() {
    InterstitialAd.load(
      adUnitId: AdHelper.interstitialAdUnitId,
      request: AdRequest(),
      adLoadCallback: InterstitialAdLoadCallback(
        onAdLoaded: (ad) {
          ad.fullScreenContentCallback = FullScreenContentCallback(
            onAdDismissedFullScreenContent: (ad) {
              _moveToHome();
            },
          );

          setState(() {
            _interstitialAd = ad;
          });
        },
        onAdFailedToLoad: (err) {
          print('Failed to load an interstitial ad: ${err.message}');
        },
      ),
    );
  }

  ...
}
  1. En este codelab, se muestra un anuncio intersticial después de que un usuario completa los 5 niveles. Para minimizar las solicitudes de anuncios innecesarias, debes solicitar uno cuando el usuario llegue al nivel 3.

En el método onNewLevel(), agrega las siguientes líneas.

lib/game_route.dart

@override
void onNewLevel(int level, Drawing drawing, String clue) {
  ...

  // TODO: Load an Interstitial Ad
  if (level >= 3 && _interstitialAd == null) {
    _loadInterstitialAd();
  }
}
  1. Cuando finaliza el juego, se muestra un diálogo con la puntuación. Cuando el usuario cierra ese diálogo, se lo redirige a la pantalla principal de Awesome Drawing Quiz.

Como los anuncios intersticiales deben mostrarse en la transición de una pantalla a otra, publicaremos uno cuando el usuario haga clic en el botón CERRAR.

Modifica el método onGameOver() como se indica a continuación.

lib/game_route.dart

@override
void onGameOver(int correctAnswers) {
  showDialog(
    context: _scaffoldKey.currentContext,
    builder: (context) {
      return AlertDialog(
        title: Text('Game over!'),
        content: Text('Score: $correctAnswers/5'),
        actions: [
          FlatButton(
            child: Text('close'.toUpperCase()),
            onPressed: () {

              // TODO: Display an Interstitial Ad
              if (_interstitialAd != null) {
                _interstitialAd?.show();
              } else {
                _moveToHome();
              }
            },
          ),
        ],
      );
    },
  );
}
  1. Libera el recurso asociado con el objeto InterstitialAd. Para ello, llama al método InterstitialAd.dispose() en el método de devolución de llamada dispose().

lib/game_route.dart

@override
void dispose() {
  ...

  // TODO: Dispose an InterstitialAd object
  _interstitialAd?.dispose();

  ...

  super.dispose();
}

Eso es todo. Ejecuta el proyecto y completa el juego. Si se carga a un anuncio intersticial, lo verás cuando hagas clic en el botón CERRAR (CLOSE) del diálogo de puntuación.

c546e438c405e941.gif

9. Agrega un anuncio recompensado

En esta sección, aprenderás a agregar un anuncio recompensado, que da al usuario una pista adicional como recompensa.

  1. Abre el archivo lib/game_route.dart.
  2. En la clase _GameRouteState, agrega los miembros de un anuncio recompensado y, luego, implementa el método _loadRewardedAd(). Ten presente que se cargará otro anuncio recompensado si se cierra el primero (onAdDismissedFullScreenContent) para almacenarlo en caché lo antes posible.

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  // TODO: Add _rewardedAd
  RewardedAd? _rewardedAd;

  // TODO: Implement _loadRewardedAd()
  void _loadRewardedAd() {
    RewardedAd.load(
      adUnitId: AdHelper.rewardedAdUnitId,
      request: AdRequest(),
      rewardedAdLoadCallback: RewardedAdLoadCallback(
        onAdLoaded: (ad) {
          ad.fullScreenContentCallback = FullScreenContentCallback(
            onAdDismissedFullScreenContent: (ad) {
              setState(() {
                ad.dispose();
                _rewardedAd = null;
              });
              _loadRewardedAd();
            },
          );

          setState(() {
            _rewardedAd = ad;
          });
        },
        onAdFailedToLoad: (err) {
          print('Failed to load a rewarded ad: ${err.message}');
        },
      ),
    );
  }

  ...
}
  1. Llama a _loadRewardedAd() del método initState() para solicitar un anuncio recompensado cuando se inicie el juego.

lib/game_route.dart

class _GameRouteState extends State<GameRoute> implements QuizEventListener {

  ...

  @override
  void initState() {
    ...

    // COMPLETE: Load a Rewarded Ad
    _loadRewardedAd();
  }

  ...
}
  1. Permite a los usuarios mirar un anuncio recompensado tras hacer clic en el botón de acción flotante. El botón solo se muestra cuando se carga un anuncio recompensado si el usuario aún no utilizó la pista en el nivel actual.

Modifica el método _buildFloatingActionButton() como se indica a continuación para mostrar el botón de acción flotante. Ten presente que, si se muestra el valor null, se ocultará el botón de la pantalla.

Ten en cuenta que onUserEarnedReward es el evento más importante en un anuncio recompensado. Se activa cuando un usuario cumple con los requisitos para recibir una recompensa (por ejemplo, cuando termina de ver un video).

En este codelab, el método QuizManager.instance.useHint() se llama desde la devolución de llamada, lo que revela un carácter más en la cadena de pistas. La app vuelve a cargar un anuncio recompensado en la devolución de llamada onAdClosed para garantizar que el anuncio esté listo lo antes posible.

lib/game_route.dart

Widget? _buildFloatingActionButton() {
  // TODO: Return a FloatingActionButton if a rewarded ad is available
  return (!QuizManager.instance.isHintUsed && _rewardedAd != null)
      ? FloatingActionButton.extended(
          onPressed: () {
            showDialog(
              context: context,
              builder: (context) {
                return AlertDialog(
                  title: Text('Need a hint?'),
                  content: Text('Watch an Ad to get a hint!'),
                  actions: [
                    TextButton(
                      child: Text('cancel'.toUpperCase()),
                      onPressed: () {
                        Navigator.pop(context);
                      },
                    ),
                    TextButton(
                      child: Text('ok'.toUpperCase()),
                      onPressed: () {
                        Navigator.pop(context);
                        _rewardedAd?.show(
                          onUserEarnedReward: (_, reward) {
                            QuizManager.instance.useHint();
                          },
                        );
                      },
                    ),
                  ],
                );
              },
            );
          },
          label: Text('Hint'),
          icon: Icon(Icons.card_giftcard),
        )
      : null;
}
  1. Libera el recurso asociado con el objeto RewardedAd. Para ello, llama al método RewardedAd.dispose() en el método de devolución de llamada dispose().

lib/game_route.dart

@override
void dispose() {
  ...

  // TODO: Dispose a RewardedAd object
  _rewardedAd?.dispose();

  ...

  super.dispose();
}

Eso es todo. Ejecuta el proyecto y ponte a jugar. Cuando se haya cargado un anuncio recompensado, verás un botón de pista en la parte inferior de la pantalla. Haz clic en el botón Pista (Hint) para obtener una pista adicional.

4a114d243ae3e71d.gif

10. ¡Listo!

Completaste el codelab. Puedes encontrar el código completo de este codelab en la carpeta android_studio_folder.pngcomplete.

Consulta el codelab Cómo agregar anuncios banner o intercalados nativos de AdMob a una app creada con Flutter para aprender a implementar dichos formatos.

Para obtener más información, prueba los otros codelabs de Flutter.