AI-generated Key Takeaways
-  The Google User Messaging Platform (UMP) SDK helps manage user privacy choices in your app. 
-  Request an update of the user's consent information at every app launch using requestConsentInfoUpdate().
-  After obtaining consent status, use loadAndShowConsentFormIfRequired()to display necessary consent forms.
-  Some messages require a privacy options entry point, and you can check if this is needed using getPrivacyOptionsRequirementStatus().
-  Before requesting ads, verify user consent using canRequestAds().
The Google User Messaging Platform (UMP) SDK is a privacy and messaging tool to help you manage privacy choices. For more information, see About Privacy & messaging .
Create a message type
Create user messages with one of the Available user message types under the Privacy & messagingtab of your AdMob account. The UMP SDK attempts to display a privacy message created from the AdMob Application ID set in your project.
For more details, see About privacy and messaging .
Get the user's consent information
You should request an update of the user's consent information at every app
launch, using requestConsentInfoUpdate() 
. This request checks the following:
- Whether consent is required. For example, consent is required for the first time, or the previous consent decision expired.
- Whether a privacy options entry point is required. Some privacy messages require apps to allow users to modify their privacy options at any time.
  @override 
 void 
  
 initState 
 () 
  
 { 
  
 super 
 . 
 initState 
 (); 
  
 // Create a ConsentRequestParameters object. 
  
 final 
  
 params 
  
 = 
  
 ConsentRequestParameters 
 (); 
  
 // Request an update to consent information on every app launch. 
  
 ConsentInformation 
 . 
 instance 
 . 
 requestConsentInfoUpdate 
 ( 
  
 params 
 , 
  
 () 
  
 async 
  
 { 
  
 // Called when consent information is successfully updated. 
  
 }, 
  
 ( 
 FormError 
  
 error 
 ) 
  
 { 
  
 // Called when there's an error updating consent information. 
  
 }, 
  
 ); 
 } 
 
 
Load and present the privacy message form
After you have received the most up-to-date consent status, call loadAndShowConsentFormIfRequired() 
to load any forms required to
collect user consent. After loading, the forms present immediately.
  @override 
 void 
  
 initState 
 () 
  
 { 
  
 super 
 . 
 initState 
 (); 
  
 // Create a ConsentRequestParameters object. 
  
 final 
  
 params 
  
 = 
  
 ConsentRequestParameters 
 (); 
  
 // Request an update to consent information on every app launch. 
  
 ConsentInformation 
 . 
 instance 
 . 
 requestConsentInfoUpdate 
 ( 
  
 params 
 , 
  
 () 
  
 async 
  
 { 
  
 ConsentForm 
 . 
 loadAndShowConsentFormIfRequired 
 (( 
 loadAndShowError 
 ) 
  
 { 
  
 if 
  
 ( 
 loadAndShowError 
  
 != 
  
 null 
 ) 
  
 { 
  
 // Consent gathering failed. 
  
 } 
  
 // Consent has been gathered. 
  
 }); 
  
 }, 
  
 ( 
 FormError 
  
 error 
 ) 
  
 { 
  
 // Handle the error. 
  
 }, 
  
 ); 
 } 
 
 
Privacy options
Some privacy message forms are presented from a publisher-rendered privacy options entry point, letting users manage their privacy options at any time. To learn more about which message your users see at the privacy options entry point, see Available user message types .
Check if a privacy options entry point is required
After you have called requestConsentInfoUpdate() 
, check getPrivacyOptionsRequirementStatus() 
to
determine if a privacy options entry point is required for your app. If an entry
point is required, add a visible and interactable UI element to your app that
presents the privacy options form. If a privacy entry point is not required,
configure your UI element to be not visible and interactable.
  /// Helper variable to determine if the privacy options entry point is required. 
 Future<bool> 
  
 isPrivacyOptionsRequired 
 () 
  
 async 
  
 { 
  
 return 
  
 await 
  
 ConsentInformation 
 . 
 instance 
  
 . 
 getPrivacyOptionsRequirementStatus 
 () 
  
 == 
  
 PrivacyOptionsRequirementStatus 
 . 
 required 
 ; 
 } 
 
 
For the full list of privacy options requirement statuses, see    
.PrivacyOptionsRequirementStatus 
 
Present the privacy options form
When the user interacts with your element, present the privacy options form:
  ConsentForm 
 . 
 showPrivacyOptionsForm 
 (( 
 formError 
 ) 
  
 { 
  
 if 
  
 ( 
 formError 
  
 != 
  
 null 
 ) 
  
 { 
  
 debugPrint 
 ( 
 " 
 ${ 
 formError 
 . 
 errorCode 
 } 
 : 
 ${ 
 formError 
 . 
 message 
 } 
 " 
 ); 
  
 } 
 }); 
 
 
Request ads with user consent
Before requesting ads, use canRequestAds() 
to check if you've
obtained consent from the user:
  await 
  
 ConsentInformation 
 . 
 instance 
 . 
 canRequestAds 
 () 
 
 
Listed are the following places to check if you can request ads while gathering consent:
- After the UMP SDK gathers consent in the current session.
- Immediately after you have called requestConsentInfoUpdate(). The UMP SDK might have obtained consent in the previous app session.
If an error occurs during the consent gathering process, check if you can request ads. The UMP SDK uses the consent status from the previous app session.
Prevent redundant ad request work
As you check canRequestAds() 
after gathering consent and after calling requestConsentInfoUpdate() 
, ensure your logic prevents redundant ad requests that
might result in both checks returning true 
. For example, with a boolean
variable.
Testing
If you want to test the integration in your app as you're developing, follow these steps to programmatically register your test device. Be sure to remove the code that sets these test device IDs before you release your app.
- Call requestConsentInfoUpdate().
-  Check the log output for a message similar to the following example, which shows your device ID and how to add it as a test device: AndroidUse new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.iOS<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
-  Copy your test device ID to your clipboard. 
-  Modify your code to call ConsentDebugSettings.testIdentifiersand pass in a list of your test device IDs.ConsentDebugSettings debugSettings = ConsentDebugSettings ( testIdentifiers: [ "TEST-DEVICE-HASHED-ID" ], ); ConsentRequestParameters params = ConsentRequestParameters ( consentDebugSettings: debugSettings ); ConsentInformation . instance . requestConsentInfoUpdate ( params , () async { // ... };
Force a geography
The UMP SDK provides a way to test your app's behavior as though the device
were located in various regions, such as the EEA or UK, using  debugGeography 
 
. Note that debug settings only work on test devices.
  ConsentDebugSettings 
  
 debugSettings 
  
 = 
  
 ConsentDebugSettings 
 ( 
  
  debugGeography: 
  
 DebugGeography 
 . 
 debugGeographyEea 
 , 
  
 testIdentifiers: 
  
 [ 
 "TEST-DEVICE-HASHED-ID" 
 ], 
 ); 
 ConsentRequestParameters 
  
 params 
  
 = 
  
 ConsentRequestParameters 
 ( 
 consentDebugSettings: 
  
 debugSettings 
 ); 
 ConsentInformation 
 . 
 instance 
 . 
 requestConsentInfoUpdate 
 ( 
 params 
 , 
  
 () 
  
 async 
  
 { 
  
 // ... 
 }; 
 
 
Reset consent state
When testing your app with the UMP SDK, you might find it helpful to reset the
state of the SDK so that you can simulate a user's first install experience.
The SDK provides the reset() 
method to do this.
  ConsentInformation 
 . 
 instance 
 . 
 reset 
 (); 
 
 
Examples on GitHub
See a full example of the UMP SDK integration covered in this page in our Flutter examples .

