Hoy vamos a aprender a implementar el mensaje de consentimiento obligatorio de Google Admob que solicitará a los usuarios europeos por la ley GDPR o GPDR o Protección de Datos que quieran ver los anuncios de la APP con Admob.
Vamos a utilizar el paquete oficial de Admob para Flutter (https://developers.google.com/admob/flutter/eu-consent?hl=es-419)
En mi caso utilizo:
google_mobile_ads: ^4.0.0
Ahora vamos a aplicar lo siguiente:
En caso de iOS
Debemos solicitar App Tracking Transparency, para ello vamos al archivo Info.plist y añadimos:
<key>NSUserTrackingUsageDescription</key> <string>This identifier will be used to deliver personalized ads to you.</string>
También añadimos esta key:
<key>GADDelayAppMeasurementInit</key> <true/>
Y después de añadir la key, necesitas añadir la librería AppTrakingTransparency.framework usando Xcode:
Parte de Android / iOS
Vamos a crear un widget llamado ConsentAds.dart
import 'package:flutter/material.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; class ConsentAds extends StatefulWidget { @override _ConsentAdsState createState() => _ConsentAdsState(); } class _ConsentAdsState extends State<ConsentAds> { @override void initState() { super.initState(); _requestConsentInfo(); } // Function to request consent information void _requestConsentInfo() { final params = ConsentRequestParameters(); ConsentInformation.instance.requestConsentInfoUpdate( params, () async { if (await ConsentInformation.instance.isConsentFormAvailable()) { _loadForm(); } }, (FormError error) { // Handle the error }, ); } // Function to load the consent form void _loadForm() { ConsentForm.loadConsentForm( (ConsentForm consentForm) async { var status = await ConsentInformation.instance.getConsentStatus(); if (status == ConsentStatus.required) { _showForm(consentForm); } }, (FormError formError) { // Handle the error }, ); } // Function to show the consent form void _showForm(ConsentForm consentForm) { consentForm.show( (FormError? formError) { // Handle dismissal by reloading form _loadForm(); }, ); } @override Widget build(BuildContext context) { // Only return an empty SizedBox return SizedBox(); } }
Para utilizarlo, vamos a la screen principal y añadimos lo siguiente:
import 'package:flutter/material.dart'; import 'ruta/del/archivo/ConsentAds.dart'; // Ajusta la ruta según tu estructura de archivos void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Ejemplo de Consentimiento de AdMob'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Otros widgets de tu aplicación aquí Text('Contenido de la aplicación'), SizedBox(height: 20), ConsentAds(), // Invoca el widget ConsentAds aquí ], ), ), ), ); } }
En el caso de Android vamos a android\app\src\main\AndroidManifest.xml de nuestra app y añadimos:
<manifest> <application> <meta-data android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT" android:value="true"/> </application> </manifest>
Y al ejecutar nuestra APP aparecerá:
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.