EEltaCrew
HomeBlog

My AdMob account had zero GDPR consent messages: adding UMP to 21 apps in one day

Published 2026-09-16Measured 2026-09-11About 3 min readelta · EltaCrew

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:

  1. No message in the console.
  2. 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:

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:

  1. requestConsentInfoUpdate to refresh consent status
  2. loadAndShowConsentFormIfRequired to show the form only when needed
  3. 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

What went wrong

Summary

AdMobGDPRUMPAndroid

Related

R8 on, build green, app broken: five runtime traps that actually hit across 15 appsI enabled R8 in 15 apps for Play's 2027 code-optimization requirement. Every build passed, but 2 of the first 7 I installed broke at runtime. Gson deserialization, getIdentifier resource lookups, Room _Impl classes, and debuggable builds that silently disable R8: the kinds of failure that never show up in a crash log.Same app, same users, native ads paid 38x more per 1,000 impressions than banners, and why I stopped short of deleting the banner unitsSeven days of AdMob data from two TV remote apps, comparing revenue per 1,000 impressions for banners and native advanced ads. How over-exposure kills the rate, how to read native's low fill rate, and why I aborted deleting the banner ad units the next day.Why switching language inside the app sometimes does nothing: setApplicationLocales only recreates activities that are on screen"I switched to English and it stayed Korean until I restarted the app." The cause is that AppCompat recreates only the activities that are started at that moment; screens that were stopped behind it come back in the old language. The fix I applied to 8 apps, and five traps that came with it.