[Android GDPR离线状态下的同意表单行为

问题描述 投票:0回答:1

我想了解设备离线时GDPR同意书的行为。我检查了GDPR同意的代码,如下所示:

package com.example.app;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
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 java.net.MalformedURLException;
import java.net.URL;

public class GdprHelper {

    private static final String PUBLISHER_ID = "YOUR-PUBLISHER-ID";
    private static final String PRIVACY_URL = "YOUR-PRIVACY-URL";
    private static final String MARKET_URL_PAID_VERSION = "market://details?id=com.example.app.pro";

    private final Context context;

    private ConsentForm consentForm;

    public GdprHelper(Context context) {
        this.context = context;
    }

    // Initialises the consent information and displays consent form if needed
    public void initialise() {
        ConsentInformation consentInformation = ConsentInformation.getInstance(context);
        consentInformation.requestConsentInfoUpdate(new String[]{PUBLISHER_ID}, new ConsentInfoUpdateListener() {
            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                // User's consent status successfully updated.
                if (consentStatus == ConsentStatus.UNKNOWN) {
                    displayConsentForm();
                }
            }

            @Override
            public void onFailedToUpdateConsentInfo(String errorDescription) {
                // Consent form error. Would be nice to have proper error logging. Happens also when user has no internet connection
                if (BuildConfig.BUILD_TYPE.equals("debug")) {
                    Toast.makeText(context, errorDescription, Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    // Resets the consent. User will be again displayed the consent form on next call of initialise method
    public void resetConsent() {
        ConsentInformation consentInformation = ConsentInformation.getInstance(context);
        consentInformation.reset();
    }

    private void displayConsentForm() {

        consentForm = new ConsentForm.Builder(context, getPrivacyUrl())
                .withListener(new ConsentFormListener() {
                    @Override
                    public void onConsentFormLoaded() {
                        // Consent form has loaded successfully, now show it
                        consentForm.show();
                    }

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

                    @Override
                    public void onConsentFormClosed(
                            ConsentStatus consentStatus, Boolean userPrefersAdFree) {
                        // Consent form was closed. This callback method contains all the data about user's selection, that you can use.
                        if (userPrefersAdFree) {
                            redirectToPaidVersion();
                        }
                    }

                    @Override
                    public void onConsentFormError(String errorDescription) {
                        // Consent form error. Would be nice to have some proper logging
                        if (BuildConfig.BUILD_TYPE.equals("debug")) {
                            Toast.makeText(context, errorDescription, Toast.LENGTH_LONG).show();
                        }
                    }
                })
                .withPersonalizedAdsOption()
                .withNonPersonalizedAdsOption()
                .withAdFreeOption()
                .build();
        consentForm.load();
    }

    private URL getPrivacyUrl() {
        URL privacyUrl = null;
        try {
            privacyUrl = new URL(PRIVACY_URL);
        } catch (MalformedURLException e) {
            // Since this is a constant URL, the exception should never(or always) occur
            e.printStackTrace();
        }
        return privacyUrl;
    }

    private void redirectToPaidVersion() {
        Intent i = new Intent(
                Intent.ACTION_VIEW,
                Uri.parse(MARKET_URL_PAID_VERSION));
        context.startActivity(i);
    }

}

这是根据链接:Google consent SDK

据我了解,以上代码的行为如下:

1。对于欧洲用户:

i)如果已连接互联网:在启动应用程序之前,将向用户显示同意书。

ii)如果没有连接互联网:不会向用户显示同意表单,并且将直接导航到应用程序的第一页。如果用户在两者之间连接互联网,那么也不会显示用户同意书。

2。对于非欧洲用户:

i)如果已连接互联网:在启动应用程序之前,不会向用户显示同意书。

ii)如果没有连接互联网:不会向用户显示同意书,并且应用程序将运行。如果用户在两者之间连接互联网,那么也不会显示用户同意书。

我的问题如下:

我怀疑用户是欧洲人且未连接到互联网的情况。现在,同意书将不会显示。现在,如果用户在应用程序之间启用了Internet,那么我们需要在当时明确征得同意。

或让用户通过在应用程序中单击给定的选项(重置)来表示同意。

android offline
1个回答
0
投票

在加载广告之前,我检查ConsentStatus个性化还是非个性化

如果没有互联网连接,则ConsentStatus将为未知,并且我的广告无法加载,这的确是绕过应用程序上的广告的一种方式,但是我不确定我们该怎么做这个。

if (ConsentInformation.getInstance(this).getConsentStatus() == ConsentStatus.NON_PERSONALIZED){
            Bundle extras = new Bundle();
            extras.putString("npa", "1");

            adRequest = new AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                    .addNetworkExtrasBundle(AdMobAdapter.class, extras)
                    .build();

            adLoader.loadAd(adRequest);
}else if(ConsentInformation.getInstance(this).getConsentStatus() == ConsentStatus.PERSONALIZED){
            adRequest = new AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                    .build();
            adLoader.loadAd(adRequest);
}
© www.soinside.com 2019 - 2024. All rights reserved.