My AdMob account had zero GDPR consent messages: adding UMP to 21 apps in one day
A new app's release log said "no form(s) configured". The AdMob account had no European-regulation consent message at all, and only 3 of 17 live apps even contained UMP code. The order of operations to create the message, add the code to 14 apps and re-release, plus the traps along the way.
The discovery
While running a release build of a newly built app, the log had this line:
UMP: no form(s) configured
The consent SDK (User Messaging Platform) tried to fetch a form from the console and found none. In AdMob › Privacy & messaging, the European regulations card said "Create". There was no message. For years, users in the EEA, UK and Switzerland had been getting limited ads without ever being asked.
It was worse than that, in two layers:
- No message in the console.
- Of 17 live apps, only 3 contained UMP code (
requestConsentInfoUpdate/ConsentInformation). For the other 14, a message would do nothing.
Console side: one message, 21 apps
I created a single message, ticked all 21 apps (17 live + 4 new) under "Select apps", set English as the default and added 18 more languages. Korean is not in the list, since it is not a regulated region.
Settings:
- Consent and manage options enabled
- "Do not consent" button: off in all countries (kept the default for consent rate; if a country requires it, I turn it on then)
- Close button: off
It takes up to an hour after publishing to reach the apps. Every app needs a privacy policy URL registered, or saving fails with "invalid or missing selection". Adding each new app to this message's app list is the step that is easiest to forget.
App side: code in 14 apps, then re-release
A console message only works for apps that contain UMP code. I added the user-messaging-platform dependency to 14 apps and inserted, before initializing the ads SDK, the sequence that refreshes consent info and shows the form if required. I copied one class from the new app as the template.
The essential order:
requestConsentInfoUpdateto refresh consent statusloadAndShowConsentFormIfRequiredto show the form only when needed- Initialize the ads SDK only when
canRequestAds()is true
Step 3 matters. If you initialize ads regardless of the consent result, the form is meaningless.
The same day I also added forced in-app updates and shipped all 17 apps together. Users left on old versions would never see the consent form otherwise.
Verify on a Play-installed build only
- Debug builds and sideloaded APKs do not go through real region detection, so they are hard to verify.
- I verified with a build on the Play internal-testing track, on a device set to an EEA region. The form appeared, and ads served after consent.
- The message is live when the European regulations card reads "Manage · N active messages".
What went wrong
- I split the 14 builds across several agents, and 9 came out unsigned because I had not put the signing-key environment variable in the instructions. A script that compares the signer and versionName inside the AAB against the source caught it. File timestamps cannot tell you.
- One app was signed with an old keystore and Play rejected the upload ("wrong key"). Re-signed with the shared keystore.
- The "US state regulations" message is separate. I have not created it; that is a separate decision.
Summary
- Without a European-regulations message in the AdMob console, apps that call UMP end with "no form" and apps that do not call it do nothing. Both mean limited ads for EEA users.
- One message + select all apps + privacy policy URL finishes the console side.
- Apps without the code need the dependency and a re-release, and a forced update to pull old-version users along.
- Only a Play-installed build gives a meaningful test.