Today we are going to learn how we can add the mandatory ad consent message to comply with GDPR.
![](https://i0.wp.com/images.pexels.com/photos/1549201/pexels-photo-1549201.jpeg?w=1200&ssl=1)
The first thing we need to do is to have our message set up: https://devcodelight.com/mensaje-consentimiento-conforme-rgpd-para-admob/
NOTE: I am using version 12.2.0 of react-native-google-mobile-ads at least (https://github.com/invertase/react-native-google-mobile-ads)
Once configured, let’s go to android/app/proguard-rules.pro and add:
-keep class com.google.android.gms.internal.consent_sdk.** { *; }
Now we need to go to our app.json of Expo to add:
{ "expo": { "plugins": [ [ "expo-build-properties", { "android": { "extraProguardRules": "-keep class com.google.android.gms.internal.consent_sdk.** { *; }" } } ] ] } }
In my case I have to add it to the rest of the attributes I use:
![](https://i0.wp.com/devcodelight.com/wp-content/uploads/2024/01/imagen-1.png?resize=944%2C357&ssl=1)
Now we need to activate delay_app_measurement_init when starting the ads so we go to the configuration of «react-native-google-mobile-ads» inside app.json:
{ "react-native-google-mobile-ads": { "android_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx", "ios_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx", "user_tracking_usage_description": "This identifier will be used to deliver personalized ads to you." "delay_app_measurement_init": true } }
Now we have to rebuild the APP:
npx expo prebuild
And now let’s create the component that will allow us to generate the alert:
UserConsent.js
import React, { useEffect, useState } from 'react'; import { View } from 'react-native'; import mobileAds, { AdsConsent } from 'react-native-google-mobile-ads'; const AdsUserConsent = () => { const [isMobileAdsStartCalled, setMobileAdsStartCalled] = useState(false); useEffect(() => { const startGoogleMobileAdsSDK = async () => { if (isMobileAdsStartCalled) return; setMobileAdsStartCalled(true); // Logic to handle Apple's App Tracking Transparency for iOS. // Initialize the Google Mobile Ads SDK await mobileAds().initialize(); // Here you can request ads after the SDK is initialized // (for example, load an ad). }; const handleConsent = async () => { await AdsConsent.requestInfoUpdate(); const adsConsentInfo = await AdsConsent.loadAndShowConsentFormIfRequired(); if (adsConsentInfo.canRequestAds) { startGoogleMobileAdsSDK(); } }; handleConsent(); }, [isMobileAdsStartCalled]); return <View />; }; export default AdsUserConsent ;
And to use it we will do the following:
Let’s go to our home screen and add this component:
<AdsUserConsent/>
To make it work correctly, we must rebuild a development build, we can use this command locally:
npx expo run:android npx expo run:ios
or remotely with Expo:
eas build -p android --profile development eas build -p ios --profile development
And now the following message should appear:
![](https://i0.wp.com/devcodelight.com/wp-content/uploads/2024/01/imagen-2.png?resize=376%2C724&ssl=1)
![](https://i0.wp.com/devcodelight.com/wp-content/uploads/2023/07/cropped-light_logo-5.png?resize=100%2C100&ssl=1)