Диалог о согласии GDPR не появится
Я пытаюсь добавить Соглашение GDPR dialog
к моему приложению с помощью нового Consent SDK от Google (я не живу в ЕС), но я не могу вот мой код, когда я его запускаю, диалоговое окно не открывается, я пытался использовать VPN, но все еще тот же диалог не появляется
/*GDRP*/
ConsentInformation consentInformation = ConsentInformation.getInstance(this);
String[] publisherIds = {"pub-xxxxx...."};
consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
@Override
public void onConsentInfoUpdated(ConsentStatus consentStatus) {
}
@Override
public void onFailedToUpdateConsentInfo(String errorDescription) {
}
});
URL privacyUrl = null;
try {
// TODO: Replace with your app's privacy policy URL.
privacyUrl = new URL("URL");
} catch (MalformedURLException e) {
e.printStackTrace();
// Handle error.
}
form = new ConsentForm.Builder(this, privacyUrl)
.withListener(new ConsentFormListener() {
@Override
public void onConsentFormLoaded(){
showForm();
}
@Override
public void onConsentFormOpened() {
}
@Override
public void onConsentFormClosed(
ConsentStatus consentStatus, Boolean userPrefersAdFree) {
}
@Override
public void onConsentFormError(String errorDescription) {
}
})
.withPersonalizedAdsOption()
.withNonPersonalizedAdsOption()
.withAdFreeOption()
.build();
form.load();
private void showForm() {
form.show();
}
1 ответ
У меня была точно такая же проблема. Проблема в том, что при попытке показать форму не загружается полностью из-за ошибки в SDK.
Это должно решить это:
// declare your form up
ConsentForm form;
// declare this function that will show the form
protected void showConsentForm(){
form.show();
}
// on the onCreate
form = new ConsentForm.Builder(context, privacyUrl)
.withListener(new ConsentFormListener() {
@Override
public void onConsentFormLoaded() {
// Consent form loaded successfully.
Log.d("SplashScreen", "Consent form Loaded ");
showConsentForm();
}
@Override
public void onConsentFormOpened() {
// Consent form was displayed.
Log.d("SplashScreen", "Consent form opened ");
}
@Override
public void onConsentFormClosed(
ConsentStatus consentStatus, Boolean userPrefersAdFree) {
// Consent form was closed.
Log.d("SplashScreen", "Consent form Closed ");
}
@Override
public void onConsentFormError(String errorDescription) {
// Consent form error.
Log.d("SplashScreen", "Consent form error " + errorDescription);
}
})
.withPersonalizedAdsOption()
.withNonPersonalizedAdsOption()
.build();
// load the form so we can call .show on it after
form.load();
Убедитесь, что вы добавили эту строку для тестирования в странах, не входящих в ЕС.
ConsentInformation.getInstance(context).
setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);
Как сказал Alexandru Topală, вы не можете позвонитьshow()
сразу после load()
.
Очень плохо документировано...
Я реализовал это с помощью котлина, и late init
:
lateinit var form: ConsentForm
form = ConsentForm.Builder(this@HomeActivity, privacyUrl)
.withListener(object : ConsentFormListener() {
override fun onConsentFormLoaded() {
form.show()
}
override fun onConsentFormOpened() {}
override fun onConsentFormClosed(consentStatus: ConsentStatus, userPrefersAdFree: Boolean) {
viewModel.consentUpdate(consentStatus)
if (userPrefersAdFree) {
PurchaseActivity.startActivity(this@HomeActivity)
}
}
override fun onConsentFormError(errorDescription: String) {
Timber.e(RuntimeException(errorDescription), "Failed to open consent form.")
}
})
.withPersonalizedAdsOption()
.withNonPersonalizedAdsOption()
.withAdFreeOption()
.build()
form.load()