Witam,
Niedawno moja aplikacja została wyrzucona ze sklepu Play, ponieważ nie wiedziałem, że aby używać Admob muszę zapytać użytkowników o zgodę na spersonalizowane reklamy i dodać politykę prywatności. Wzorując się na dokumentacji i gotowym rozwiązaniu napisałem zapytanie o zgodę. Problem polega na tym, że zawsze otrzymuje niepowodzenie gdy próbuje zaktualizować informację na temat czy użytkownik udzielił zgody. Próbowałem z testowymi identyfikatorami i własnymi. Przy własnych nawet nie dostaję informacji do logów, ale to może być jakiś problem z komputerem lub android studiem.
Tu kod nie aplikacji oryginalnej a tylko aplikacji robionej na potrzeby testowania reklam i zgody, ale jak tu zadziała to wszędzie powinno.
package com.example.pc.adsdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.google.ads.consent.ConsentForm;
import com.google.ads.consent.ConsentFormListener;
import com.google.ads.consent.ConsentInfoUpdateListener;
import com.google.ads.consent.ConsentInformation;
import com.google.ads.consent.ConsentStatus;
import com.google.ads.mediation.admob.AdMobAdapter;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private InterstitialAd interstitialAd;
AdRequest adRequest;
public void onClick (View view)
{
if(interstitialAd.isLoaded())
interstitialAd.show();
else
Toast.makeText(this, "not loaded", Toast.LENGTH_SHORT).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
interstitialAd = new InterstitialAd(getApplicationContext());
interstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
//Te funckje dane tutaj działają
//personalizedAds();
//showAds();
final ConsentInformation consentInformation = ConsentInformation.getInstance(getBaseContext());
String[] publisherIDs = {"pub-0123456789012345"};
consentInformation.requestConsentInfoUpdate(publisherIDs, new ConsentInfoUpdateListener() {
@Override
public void onConsentInfoUpdated(ConsentStatus consentStatus) {
if(!ConsentInformation.getInstance(getBaseContext()).isRequestLocationInEeaOrUnknown())
{
personalizedAds();
}else
{
switch (consentStatus)
{
case PERSONALIZED:
personalizedAds();
break;
case NON_PERSONALIZED:
nonPersonalizedAds();
break;
case UNKNOWN:
try {
URL url = new URL("https://www.google.pl/");
ConsentForm form = new ConsentForm.Builder(getBaseContext(),url)
.withListener(new ConsentFormListener() {
@Override
public void onConsentFormClosed(ConsentStatus consentStatus, Boolean userPrefersAdFree) {
super.onConsentFormClosed(consentStatus, userPrefersAdFree);
switch (consentStatus)
{
case PERSONALIZED:
personalizedAds();
break;
case NON_PERSONALIZED:
nonPersonalizedAds();
break;
default:
nonPersonalizedAds();
break;
}
}
})
.withNonPersonalizedAdsOption()
.withPersonalizedAdsOption()
.build();
form.load();
form.show();
}catch (Exception e)
{
Log.i("aaaa","Failed new consent");
}
break;
default:
break;
}
}
}
@Override
public void onFailedToUpdateConsentInfo(String reason) {
Log.i("aaaa","Failed to update");
}
});
}
public void personalizedAds()
{
adRequest= new AdRequest.Builder().build();
showAds();
}
public void nonPersonalizedAds()
{
Bundle extras = new Bundle();
extras.putString("npa", "1");
adRequest= new AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter.class,extras).build();
showAds();
}
public void showAds() {
AdView mAdView = findViewById(R.id.adView);
Log.i("aaaa","cosniedziala");
try {
mAdView.loadAd(adRequest);
mAdView = findViewById(R.id.adView1);
mAdView.loadAd(adRequest);
interstitialAd.loadAd(adRequest);
interstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
interstitialAd.loadAd(adRequest);
}
});
} catch (Exception e) {
Log.i("aaaa", "No ads");
}
}
}
PS czytałem jeszcze o wymaganiu dotyczącym posiadania 13 lat, ale nie wiem jak to dodać to tego formularza. Czy napisanie po prostu w polityce prywatności zapisu, że użytkownik musi mieć powyżej 13 lat wystarczy?