Как отображать диалоговое окно согласия GDPR только при первой установке приложения - PullRequest
0 голосов
/ 31 марта 2019

У меня в методе класса Utils два для обработки, если пользователь находится в стране ЕЭЗ или нет, и если это диалоговое окно согласия GDPR, будет отображаться

первый метод is_EEA_country определит, находится ли пользователь в стране ЕЭЗ илинет, и если в нем будет называться loadGDPRconsent

public final boolean is_EEA_country(Context context) {

        String EEA_COUNRIES[] = {"Austria", "Belgium",
                "Bulgaria", "Croatia", "Republic of Cyprus",
                "Czech Republic", "Denmark", "Estonia", "Finland",
                "France", "Germany", "Greece", "Hungary", "Ireland",
                "Italy", "Latvia", "Lithuania", "Luxembourg", "Malta",
                "Netherlands", "Poland", "Portugal", "Romania", "Slovakia",
                "Slovenia", "Spain", "Sweden", "United Kingdom"};

        GeoIpService ipApiService = ServicesManager.getGeoIpService();
        ipApiService.getGeoIp().enqueue(new Callback<GeoIpResponseModel>() {
            @Override
            public void onResponse(@NonNull Call<GeoIpResponseModel> call,
                                   @NonNull retrofit2.Response<GeoIpResponseModel> response) {
                if (response.isSuccessful()) {

                    String countryName = response.body().getCountryName();

                    if (Arrays.asList(EEA_COUNRIES).contains(countryName)) {
                        Toast.makeText(context, countryName, Toast.LENGTH_LONG).show();
                        isUserApproved = loadGDPRconsent(context);

                    } else {
                        Toast.makeText(context, "NOT GDRP", Toast.LENGTH_LONG).show();
                        if (context instanceof MainActivity) {
                            MainActivity.mainActivityBanner();
                        } else {
                            DetailsActivity.detailsActivityBanner();
                        }
                    }


                } else {

                    Toast.makeText(context, "NOT SUCESS", Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFailure(@NonNull Call<GeoIpResponseModel> call, @NonNull Throwable t) {
                Toast.makeText(context, t.toString(), Toast.LENGTH_SHORT).show();
            }
        });

        return isUserApproved;

    }

loadGDPRconsent метод

public final boolean loadGDPRconsent(Context context) {

        ConsentInformation consentInformation = ConsentInformation.getInstance(context);
        String[] publisherIds = {"pub-0123456789012345"};
        consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                // User's consent status successfully updated.
                if (consentStatus == ConsentStatus.PERSONALIZED
                        || consentStatus == ConsentStatus.NON_PERSONALIZED) {

                    isUserApproved = true;
                    if (context instanceof MainActivity) {
                        MainActivity.mainActivityBanner();
                    } else {
                        DetailsActivity.detailsActivityBanner();
                    }

                }
            }

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


        URL privacyUrl = null;
        try {
            privacyUrl = new URL("https://www.your.com/privacyurl");
        } catch (MalformedURLException e) {
            e.printStackTrace();
            // Handle error.
        }

        form = new ConsentForm.Builder(context, privacyUrl)
                .withListener(new ConsentFormListener() {
                    @Override
                    public void onConsentFormLoaded() {
                        // Consent form loaded successfully.
                        form.show();
                        Log.e(TAG, form.isShowing() + " ");
                    }

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

                    @Override
                    public void onConsentFormClosed(
                            ConsentStatus consentStatus, Boolean userPrefersAdFree) {
                        // Consent form was closed.
                        if (consentStatus == ConsentStatus.PERSONALIZED
                                || consentStatus == ConsentStatus.NON_PERSONALIZED) {

                      isUserApproved = true;

                            if (context instanceof MainActivity) {
                                MainActivity.mainActivityBanner();
                            } else {
                                DetailsActivity.detailsActivityBanner();
                            }
                        }
                    }

                    @Override
                    public void onConsentFormError(String errorDescription) {
                        // Consent form error.
                        Log.e(TAG, errorDescription);
                    }
                })
                .withPersonalizedAdsOption()
                .withNonPersonalizedAdsOption()
                .build();
        form.load();

        return isUserApproved;
    }

Сейчас в основной деятельности я попытался сохранить согласие пользователяв SharedPreferences, так что будет вызван метод mainActivityBanner и реклама будет отображаться напрямую, если пользователь уже одобрил, но он не работает

if (sharedPreferences.getBoolean("isUserApproved", false)) {
            mainActivityBanner();
        } else {
            boolean isUserApproved = new Utils().is_EEA_country(this);
            if (isUserApproved) {
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putBoolean("isUserApproved", isUserApproved);
                editor.apply();
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...