GDPR, Consent SDK and AdMob

Anything libgdx related goes here!

Re: GDPR, Consent SDK and AdMob

Postby HD_92 » Sat May 26, 2018 4:37 pm

It is a difficult situation. Strictly speaking you always need to inform the user and their consent before accessing any of their personal data (IP address, advertising ID, Android ID, email, Facebook account info, etc.). However the type of consent needed typically depends on the type of usage you have for that personal data. For example, analytics like user retention, event tracking, revenue tracking and non-personalized ads are normal activities that you need to monetize, optimize and correctly run your business and app. So in this case a simple message like "We use device identifiers to provide our games to you. Please read and consent to our updated Privacy Policy. Privacy Policy Link. (I agree)" at the start of your app is enough. You can completely block your app until the user presses the "I Agree" button.
The only exception is if you use sensible personal data, like sexuality, medical data or if you use some kind of profiling. And here it is arguable if personalized mobile ads are some kind of profiling. Some say yes, some say no. To be on the safe side, you would need to explicitly ask for personalized ads in your consent dialog. For example: "Please read and consent to our updated Privacy Policy and decide if you want to received relevant ads or non-personalized ads. PP Link. "Non-personalized ads", "Personalized Ads".
However, it is not yet sure if this is really necessary. If you look at games from King.com, like Candy Crush Saga, and other big companies, they only show something like "Please read and consent to our updated Privacy Policy. Link. (OK)" and they still show personalized ads. Because they explicitly mention that in their privacy policy. And they argue that it is an important business factor for them, therefore they don't Opt-In but only provide an Opt-Out of personalized ads.
But even if they do it that way, it is not guaranteed to be compatible with GDPR.
HD_92
 
Posts: 453
Joined: Sun Jan 06, 2013 4:43 pm

Re: GDPR, Consent SDK and AdMob

Postby Magnesus » Sun May 27, 2018 8:06 am

Don't look at how big companies do that - they are prepared for the backlash and know it will be a warning first (fines come only if you ignore the warnings). And they have an army of lawyers and cash to back it up
Magnesus
 
Posts: 1684
Joined: Sun Sep 25, 2011 3:50 pm

Re: GDPR, Consent SDK and AdMob

Postby HD_92 » Sun May 27, 2018 12:25 pm

I totally agree on that. I talked myself with lawyers and GDPR experts and none of them can say with certainty what is truly necessary and what not.

In our case we couldn't totally give up on personalized ads. That would mean a loss of hundreds of dollars ad revenue per day.
So we have decided to use a conservative two-part approach. On the app start and for all our existing users, we show a basic consent popup like I described above. All SDKs, gameplay is blocked until they tap the "Agree" button. By default this will set the "npa" flag to "1" for AdMob mediation (so no personalized ads are shown).
After several levels of gameplay they will be shown a "Are you tired of ads?" popup. We already had this popup before, but we modified it for GDPR, so in this case they can decide if they want to pay to remove ads, or they have the options "Personalized Ads" and "Non-personalized Ads". Again there is a short description of what this means and a link to the Privacy Policy.
Of course not everyone will tap the button "Personalized Ads". But still we can limit our ad revenue loss to an acceptable level with this mechanism.

Please note that this is just an example approach that we took, not a legal advice. You will have to find your own approach that suits for your game/app.
HD_92
 
Posts: 453
Joined: Sun Jan 06, 2013 4:43 pm

Re: GDPR, Consent SDK and AdMob

Postby Magnesus » Sun May 27, 2018 8:13 pm

Did the "are you tired of ads" popup bring sale increase? Sounds like a great idea. I would put it in other words though not to piss off Google/AdMob. Bringing attention to ads might be against their policy (not sure on that, just careful).
Magnesus
 
Posts: 1684
Joined: Sun Sep 25, 2011 3:50 pm

Re: GDPR, Consent SDK and AdMob

Postby raeleus » Mon May 28, 2018 7:59 am

HD_92, thanks for sharing your strategy. Sounds like a great technique.
Join us on Discord for faster and friendlier service.
Create skins visually with Skin Composer.
raeleus
 
Posts: 465
Joined: Wed Aug 07, 2013 10:57 pm

Re: GDPR, Consent SDK and AdMob

Postby HD_92 » Wed May 30, 2018 12:11 pm

Yes, definitely an increase in sales for the ad free purchase. I don't have the exact numbers but it should have been a few percent. I'm not sure why Google/AdMob should be bothered about this. In the end they profit more if someone makes an in-app purchase than just seeing ads. They even offer this pay to remove ads option in their new Consent SDK. Well, maybe the wording could be better :)
BTW I have new figures on the impact of the consent popup and the ads choice popup. We had a drop of about 8% in DAU since the implementation of the consent popup according to analytics. However this figure is lowering again because reporting doesn't work that accurately anymore since we start analytics SDKs only after consent was given. I guess we have to live with that.
The ad choice popup works pretty well. 97% choose an option in the ad choice popup. 46% opt-in for personalized ads, 54% choose non-personalized ads.
HD_92
 
Posts: 453
Joined: Sun Jan 06, 2013 4:43 pm

Re: GDPR, Consent SDK and AdMob

Postby hoangtunho2611 » Fri Jun 15, 2018 8:19 am

Do you have any information about the robopod to use the Consent SDK for iOS? I've made it for android (it's very easy) but I'm waiting for the robopod to use for iOS.
hoangtunho2611
 
Posts: 29
Joined: Mon Mar 13, 2017 8:57 am

Re: GDPR, Consent SDK and AdMob

Postby Hagalaz » Thu Dec 06, 2018 10:21 pm

Hallo, could you please assist. I implemented consent sdk to my libgdx project.

Code: Select all
public class AndroidLauncher extends AndroidApplication {

   private ConsentForm form;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      
      AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
      initialize(new Shooter(), config);

ConsentInformation consentInformation = ConsentInformation.getInstance(getApplicationContext());
        String[] publisherIds = {"my_publisherIds"};
        consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                 // User's consent status successfully updated.
                 boolean inEEA = ConsentInformation.getInstance(getApplicationContext()).isRequestLocationInEeaOrUnknown();
                                       if (inEEA){                  
                  if(consentStatus == consentStatus.PERSONALIZED){
                     
                  }else if(consentStatus == consentStatus.NON_PERSONALIZED){
                     Bundle extras = new Bundle();
                     extras.putString("npa", "1");
                     AdRequest request = new AdRequest.Builder()
                           .addNetworkExtrasBundle(AdMobAdapter.class, extras)
                           .build();
                  }else{
                     URL privacyUrl = null;
                     try {
                        // TODO: Replace with your app's privacy policy URL.
                        privacyUrl = new URL("http://My_privacy_policy ");
                     } catch (MalformedURLException e) {
                        e.printStackTrace();
                        // Handle error.
                     }
                      form = new ConsentForm.Builder(Main.this, privacyUrl)
                           .withListener(new ConsentFormListener() {
                              @Override
                              public void onConsentFormLoaded() {
                                 // Consent form loaded successfully.
                                 form.show();
                              }

                              @Override
                              public void onConsentFormOpened() {
                                 // Consent form was displayed.
                              }

                              @Override
                              public void onConsentFormClosed(
                                    ConsentStatus consentStatus, Boolean userPrefersAdFree) {
                                 // Consent form was closed.
                                 if(consentStatus == consentStatus.NON_PERSONALIZED) {
                                    Bundle extras = new Bundle();
                                    extras.putString("npa", "1");

                                    AdRequest request = new AdRequest.Builder()
                                          .addNetworkExtrasBundle(AdMobAdapter.class, extras)
                                          .build();
                                 }
                              }

                              @Override
                              public void onConsentFormError(String errorDescription) {
                                 // Consent form error.

                              }
                           })
                           .withPersonalizedAdsOption()
                           .withNonPersonalizedAdsOption()                           
                           .build();
                     form.load();
                  }
               }else{
                  
               }
            }

            @Override
            public void onFailedToUpdateConsentInfo(String errorDescription) {
                 // User's consent status failed to update.
            }
        });

   }

}

But consent form is not displied on my phone. Maybe consent form should be set to setContentView() method? Or other way?
Hagalaz
 
Posts: 2
Joined: Thu Dec 06, 2018 10:15 pm

Re: GDPR, Consent SDK and AdMob

Postby hoangtunho2611 » Fri Dec 07, 2018 1:32 am

Please hardcode if you not in EEA.

Finally, call setDebugGeography to set your preferred geography for testing purposes.

// Geography appears as in EEA for test devices.
ConsentInformation.getInstance(context).
setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);
// Geography appears as not in EEA for debug devices.
ConsentInformation.getInstance(context).
setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_NOT_EEA);


Guide: https://developers.google.com/admob/android/eu-consent
hoangtunho2611
 
Posts: 29
Joined: Mon Mar 13, 2017 8:57 am

Re: GDPR, Consent SDK and AdMob

Postby Hagalaz » Fri Dec 07, 2018 11:23 pm

I solved problem. Thank you.

As I understood, I should use created request in my ads?

Code: Select all
private AdRequest request;

...

public void onConsentFormClosed(
                                    ConsentStatus consentStatus, Boolean userPrefersAdFree) {
                                 // Consent form was closed.
                                 if(consentStatus == consentStatus.NON_PERSONALIZED) {
                                    Bundle extras = new Bundle();
                                    extras.putString("npa", "1");

                                    request = new AdRequest.Builder()
                                          .addNetworkExtrasBundle(AdMobAdapter.class, extras)
                                          .build();
                                 }
                              }


Should this request be used in internalization of ads in example below?

Code: Select all
public void loadInterstitialAd(){
      if(consentStatus == consentStatus.NON_PERSONALIZED)
             interstitialAd.loadAd(request);  //<-- in this place
      else
             interstitialAd.loadAd(new AdRequest.Builder().build());
   }
Hagalaz
 
Posts: 2
Joined: Thu Dec 06, 2018 10:15 pm

Previous

Return to Libgdx

Who is online

Users browsing this forum: No registered users and 1 guest