Change in Default IABGPP_HDR_GppString for UMP SDK (Android & iOS) When Consent Is Not Set

233 views
Skip to first unread message

이상섭

unread,
Aug 5, 2025, 3:21:54 AM8/5/25
to Google Mobile Ads SDK Developers

Hello,

We're currently using the UMP (User Messaging Platform) SDK for both Android and iOS to collect user consent data in compliance with US privacy regulations. We rely on the IABGPP_HDR_GppString to determine whether the user has given consent or not.

🧩 Previous Behavior (Before August 2025)

When initializing the SDK (i.e. clean install, no prior consent set), the returned value for US region was:

복사편집
DBABL~BVQqAAAAAg

This string was identical to the value we observed when explicit consent was granted, which made it difficult to distinguish between "no consent given yet" and "consent given."

We assumed this behavior as the default initialization value.


📌 Current Behavior (As of August 5, 2025)

We have now observed that the default GPP string returned upon initialization (with no consent set) has changed to:

복사편집
DBABL~BAAAAAAAAg

This value seems to represent a "blank" or "unset" consent state, which would more accurately reflect the user's status before any interaction with the consent dialog.


❓ Our Questions
  1. Was this change intentional?
    Has Google officially changed the default GppString value when no consent has been set (from BVQqAAAAAg to BAAAAAAAAg)?

  2. What was the reason for this change?
    Is this to better align with IAB GPP standards by clearly distinguishing "no consent set" from "consent given"?

  3. Does this apply to both Android and iOS platforms?
    We need to verify if the change is consistent across all UMP SDK platforms (iOS and Android).

  4. Is there an official changelog or release note that documents this change?


Any confirmation or clarification from the UMP SDK team would be greatly appreciated. We want to make sure our consent handling and interpretation logic is correct and up-to-date with this new behavior.

Thank you!

Mobile Ads SDK Forum Advisor

unread,
Aug 5, 2025, 7:48:05 AM8/5/25
to google-adm...@googlegroups.com

Hi,
Thank you for contacting the Mobile Ads SDK Support team.
Based on my investigation, I can see the difference in IABGPP_HDR_GppString when Fresh Launch, Sell Data interaction under Privacy Option and Do not Sell Data interaction both in Android and  iOS. For this I will check with the wider team  the expected behavior. Additionally could you tell me you business logic behind reading consent values?

Thanks,
 
Google Logo Mobile Ads SDK Team

Feedback
How was our support today?

rating1    rating2    rating3    rating4    rating5
[2025-08-05 11:47:10Z GMT] This message is in relation to case "ref:!00D1U01174p.!500Ht01sy5sd:ref" (ADR-00328571)



이상섭

unread,
Aug 6, 2025, 5:21:38 AM8/6/25
to Google Mobile Ads SDK Developers

Hello,
After calling consentInformation.requestConsentInfoUpdate(), we noticed that the ccpa_HDRGPPString has changed from:

  • Previous: "DBABL~BVQqAAAAAg" (which we interpreted as Opt-in)

  • Current: "DBABL~BAAAAAAAAg" (which appears to be a neutral or undefined state)

Previously, since the value clearly indicated Opt-in, we did not prompt users for explicit consent.
However, with the new value, we can no longer determine consent status, and now must explicitly ask users to Opt-in.


❓ Our Questions
  • Why has the GPP string changed recently?

  • Was there a change in Google SDK behavior or Consent Mode policy?


🔧 Suggestion

It would be much more efficient if the SDK provided a simple Boolean API to determine consent status,
instead of requiring developers to manually parse GPP strings.

For example: isUserOptedIn() returning true / false.

Thank you!



    public void InitGoogleUMP() {
        LGLog.d("", "lss =================== InitGoogleUMP 1 ================== ");
        DeubugPrintUMPInfo();

        ConsentDebugSettings debugSettings = new ConsentDebugSettings.Builder(mMainActivity)
                .addTestDeviceHashedId("483CFB232949843918EA1F54E29E4AB6") // 로그에서 확인 가능
                .setDebugGeography(ConsentDebugSettings.DebugGeography.DEBUG_GEOGRAPHY_REGULATED_US_STATE)
                .build();

        umpParams =
                new ConsentRequestParameters.Builder()
                        //.setTagForUnderAgeOfConsent(true) // EU만사용,  true: 16세미만, false : 성인 //US 일때 미성년자일때만  true사용가능
                        .setConsentDebugSettings(debugSettings)
                        .build();

        ConsentInformation consentInformation = UserMessagingPlatform.getConsentInformation(mMainActivity);
        int consentStatus = consentInformation.getConsentStatus();
        LGLog.d("", "lss =================== InitGoogleUMP 2 ================== ");
        DeubugPrintUMPInfo();

        consentInformation.requestConsentInfoUpdate(
                mMainActivity,
                umpParams,
                () -> {
                    LGLog.d("", "lss =================== InitGoogleUMP 3 ================== ");
                    DeubugPrintUMPInfo();
                    if (consentInformation.isConsentFormAvailable()) {
                        UserMessagingPlatform.loadConsentForm(
                                mMainActivity,
                                consentForm -> {
                                    consentForm.show(mMainActivity, formError -> {
                                        // 동의 창 닫힘 이후 처리
                                        LGLog.d("", "lss =================== Close UMP ConsentForm ==================");
                                        LGLog.d("", "lss =================== InitGoogleUMP 4 ================== ");
                                        DeubugPrintUMPInfo();

                                        Map<String, ?> allPrefs = PreferenceManager.getDefaultSharedPreferences(mMainActivity).getAll();
                                        for (Map.Entry<String, ?> entry : allPrefs.entrySet()) {
                                            LGLog.d("UMP_PREFS", entry.getKey() + " = " + entry.getValue());
                                        }
                                    });
                                },
                                formError -> {
                                    // 양식 로드 실패
                                    LGLog.d("", "lss =================== consentForm Load fail ==================" + formError.toString());

                                });
                    }
                    else {
                        LGLog.d("", "lss =================== consentInformation.isConsentFormAvailable() fail ==================" );

                    }
                },
                formError -> {
                    // 정보 업데이트 실패
                    LGLog.d("", "lss =================== update fail ==================");
                });

    }

    private void DeubugPrintUMPInfo(){
        SharedPreferences sharedPref_pre = PreferenceManager.getDefaultSharedPreferences(mMainActivity);
        String purposeConsents = sharedPref_pre.getString("IABTCF_PurposeConsents", "");

        String ccpa_GPPSID = sharedPref_pre.getString("IABGPP_GppSID", "");
        String ccpa_HDRGPPString = sharedPref_pre.getString("IABGPP_HDR_GppString", "");
        String ccpa_IABUSPrivacy_String = sharedPref_pre.getString("IABUSPrivacy_String", "");

        LGLog.d("", "lss ccpa_GPPSID = " + ccpa_GPPSID);
        LGLog.d("", "lss ccpa_HDRGPPString = " + ccpa_HDRGPPString);
        LGLog.d("", "lss ccpa_IABUSPrivacy_String = " + ccpa_IABUSPrivacy_String);
        LGLog.d("", "lss IABTCF_PurposeConsents = " + purposeConsents);
    }

Reply all
Reply to author
Forward
0 new messages