Кого я выбираю в качестве поставщиков Admob? - PullRequest
0 голосов
/ 23 мая 2018

В соответствии с GDPR, Google говорит, что я должен «Выбрать поставщиков рекламных технологий» и получить согласие пользователей.Но форма согласия, предоставленная Google, не поддерживается, если какой-либо из идентификаторов издателя использует широко используемый набор поставщиков рекламных технологий.Это означает, что мне нужно вручную выбирать поставщиков рекламных технологий для своей учетной записи, чтобы не получать самому согласие с «опцией получения согласия, управляемого издателем».Здесь я не заполнен.

Какие из них выбрать, и какая разница, если я не использую медиацию и использую только admob?Должен ли я использовать только одного поставщика, то есть Google?

Редактировать: Спасибо за отрицательные отзывы.Честно говоря, я не понимаю, почему этот вопрос не является действительным, за исключением того, что, возможно, его следовало задавать где-то еще, и я просил совета.

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Я уже неделю пытаюсь ответить на этот вопрос.Это то, что я делаю.

Проверьте свою учетную запись Adsense, перейдите в раздел «Расширенные отчеты»> «Рекламные сети», и вы увидите всех провайдеров рекламных технологий, от которых ваше приложение получило объявления, которые должны дать вампредставление о том, какие поставщики рекламы будут вам полезны.

Если ваше приложение новое и у него нет данных, я бы предложил использовать только Google (по умолчанию).

ВВ моем конкретном случае мое приложение работало в течение 8 месяцев с 450 и 45 активными установками.

Google Networks сообщает о 91,5% показов и 97,3% о предполагаемой прибыли.

IMO с Googleпоскольку только один провайдер будет выглядеть лучше, когда пользователь хочет видеть, с кем приложение делится информацией, вместо того, чтобы иметь список из 12, о которых никогда не слышали.Вначале я думал о выборе лучших 12, но по числам это не имеет особого смысла, и я решил придерживаться только Google.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я ничего не знаю о рекламных сетях, и я выбираю Googleиз-за моей истории Admob и ничего больше.

0 голосов
/ 02 ноября 2018

Хорошо, так что я в итоге внедрил свой собственный механизм согласия.Я думаю, что это соответствует требованиям, поэтому в интересах других, вот оно:

Сначала объявите эти переменные.Они будут использоваться, чтобы решить, нужно ли вам показывать форму согласия:

boolean shouldShowConsentForm = false;
boolean goAdFreeChosen = false; // to prevent firing the consent dialog when going into settings.

Используйте этот метод, чтобы сообщить пользователю, что вы собираетесь запросить согласие:

void showConsentDialogIntro(final Context context) {
    Bundle params = new Bundle();
    params.putString("what", "showConsentDialogIntro");
    mFirebaseAnalytics.logEvent(CONSENT_COLLECTION, params);

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Something important before you continue...").
            setMessage("This app is kept free by showing ads. Tap next to see privacy options regarding this.\n\n(You can change this later in Settings too)").
            setPositiveButton("Next", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    showYesNoDialog(context, true);
                }
            })
            //.setNegativeButton("Cancel", null)
            .show();
}

Тогда этометод предоставит пользователю 3 варианта: дать согласие, не дать согласия или удалить рекламу в целом:

private void showYesNoDialog(final Context context, boolean shouldReportInFirebase) {
    if (shouldReportInFirebase) {
        Bundle params = new Bundle();
        params.putString("what", "showYesNoDialog");
        mFirebaseAnalytics.logEvent(CONSENT_COLLECTION, params);
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    final CharSequence[] items = {"Yes - Shows relevant ads", "No - Shows less relevant ads", "Go Ad free",
            "Learn how our partners collect and use your data"};
    builder.setTitle("Can THIS_APP_NAME use your data to tailor ads for you?").
            setItems(items, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Bundle params = new Bundle();
                    switch (which) {
                        case 0: // yes
                            ConsentInformation.getInstance(context)
                                    .setConsentStatus(ConsentStatus.PERSONALIZED);
                            shouldShowConsentForm = false;

                            mInterstitialAd.loadAd(new AdRequest.Builder()
                                    .addTestDevice(TEST_DEVICE_FOR_ADS)
                                    .build());

                            params.putString("what", "yes");
                            break;
                        case 1: // no
                            ConsentInformation.getInstance(context)
                                    .setConsentStatus(ConsentStatus.NON_PERSONALIZED);
                            shouldShowConsentForm = false;

                            Bundle extras = new Bundle();
                            extras.putString("npa", "1");
                            mInterstitialAd.loadAd(new AdRequest.Builder()
                                    .addNetworkExtrasBundle(AdMobAdapter.class, extras)
                                    .addTestDevice(TEST_DEVICE_FOR_ADS)
                                    .build());

                            params.putString("what", "no");

                            Snackbar.make(myToolbar, "We'll partner with Google and use a unique identifier to respect your choice.",
                                    Snackbar.LENGTH_LONG).addCallback(new BaseTransientBottomBar.BaseCallback<Snackbar>() {
                                @Override
                                public void onDismissed(Snackbar transientBottomBar, int event) {
                                    super.onDismissed(transientBottomBar, event);
                                    Snackbar.make(myToolbar, "You can change your choice later in Settings.", Snackbar.LENGTH_LONG).show();
                                }
                            })
                                    //.setDuration(3500)
                                    .show(); // 3500 is perhaps the duration for LENGTH_LONG.
/*
                            new Handler().postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    Snackbar.make(myToolbar, "You can change your choice later in Settings.", Snackbar.LENGTH_LONG).show();
                                }
                            }, 3500);
*/
                            break;
                        case 2: // ad free
                            // drawer.setSelection(settings, true);
                            goAdFreeChosen = true;
                            drawer.setSelection(DRAWER_IDENTIFIER_SETTINGS, true);

                            params.putString("what", "ad_free");
                            break;
                        case 3: // learn more
                            showLearnMoreDialog(context);

                            params.putString("what", "showLearnMoreDialog");
                            break;
                    }
                    mFirebaseAnalytics.logEvent(CONSENT_COLLECTION, params);
                }
            })
            // .setNegativeButton("Cancel", null)
            .show();
}

Если пользователь нажмет «Подробнее» (4-й вариант в меню выше), они будут представленысписок всех провайдеров, к которым они могут обратиться, чтобы просмотреть их соответствующие политики конфиденциальности:

private void showLearnMoreDialog(final Context context) {
    List<AdProvider> adProviders =
            ConsentInformation.getInstance(context).getAdProviders();

    final CharSequence[] itemsName = new CharSequence[adProviders.size()];
    final String[] itemsURL = new String[adProviders.size()];

    int i = 0;
    for (AdProvider adProvider : adProviders) {

        itemsName[i] = adProvider.getName();
        itemsURL[i] = adProvider.getPrivacyPolicyUrlString();
        i++;
    }

    ArrayAdapter adapter = new ArrayAdapter<>(context,
            android.R.layout.simple_list_item_1, itemsName);

    AlertDialog.Builder builder = new AlertDialog.Builder(context);

    builder.setTitle("Tap on our partners to learn more about their privacy policies")
            .setNegativeButton("Back", null)
            .setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                            /*        Toast.makeText(context,
                                            "URL: " + itemsURL[which].toExternalForm(), Toast.LENGTH_SHORT).show();*/
                    Intent browserIntent = new Intent(Intent.ACTION_VIEW,
                            Uri.parse(itemsURL[which]));
                    startActivity(browserIntent);

                    Bundle params = new Bundle();
                    params.putString("what", "showLearnMoreDialog_open_privacy_policy");
                    mFirebaseAnalytics.logEvent(CONSENT_COLLECTION, params);
                }
            })
            .setCancelable(true)
            .setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                    showYesNoDialog(context, false);
                }
            })
            .show();
}

Обратите внимание, что в этом разделе я также реализовал аналитику firebase, но вы можете удалить строки, относящиеся к "params", если вы нене хотите регистрировать эти события.

Вы можете увидеть статус согласия, используя этот метод:

private void getConsentStatusAndLoadAdAccordingly(final Context context) {
    ConsentInformation consentInformation = ConsentInformation.getInstance(context);
    //   consentInformation.addTestDevice(TEST_DEVICE_FOR_ADS);
    //   consentInformation.setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA); // for forcing Europe area; testing.
    //   consentInformation.setConsentStatus(ConsentStatus.UNKNOWN); // useful for triggering it after saving status; testing.

    String[] publisherIds = {MY_PUBLISHER_ID};
    consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
        @Override
        public void onConsentInfoUpdated(ConsentStatus consentStatus) {
            loog("consentInformation", "onConsentInfoUpdated");
            // User's consent status successfully updated.
            if (ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown()) {
                loog("consentInformation", "isRequestLocationInEeaOrUnknown = true");
                    /* If the isRequestLocationInEeaOrUnknown() method returns false, the user is not
                    located in the European Economic Area and consent is not required under the EU User Consent Policy.

                    If the isRequestLocationInEeaOrUnknown() method returns true:
                    If the returned ConsentStatus is PERSONALIZED or NON_PERSONALIZED, the user has already provided consent.
                    You can now forward consent to the Google Mobile Ads SDK.
                    If the returned ConsentStatus is UNKNOWN, you need to collect consent. */
                loog("consentInformation", "consentStatus = " + consentStatus);

                if (consentStatus == ConsentStatus.UNKNOWN) {
                    // showGoogleConsentForm(DrawerAndFragmentActivity.this);
                    shouldShowConsentForm = true;
                } else if (consentStatus == ConsentStatus.NON_PERSONALIZED) {
                        /* The default behavior of the Google Mobile Ads SDK is to serve personalized ads. If a user
                    has consented to receive only non-personalized ads, you can configure an AdRequest object
                    with the following code to specify that only non-personalized ads should be returned: */
                    Bundle extras = new Bundle();
                    extras.putString("npa", "1");
                    mInterstitialAd.loadAd(new AdRequest.Builder()
                            .addNetworkExtrasBundle(AdMobAdapter.class, extras)
                            .addTestDevice(TEST_DEVICE_FOR_ADS)
                            .build());
                } else if (consentStatus == ConsentStatus.PERSONALIZED) {
                    mInterstitialAd.loadAd(new AdRequest.Builder()
                            .addTestDevice(TEST_DEVICE_FOR_ADS)
                            .build());
                }
            } else {
                loog("consentInformation", "isRequestLocationInEeaOrUnknown = false");
                mInterstitialAd.loadAd(new AdRequest.Builder()
                        .addTestDevice(TEST_DEVICE_FOR_ADS)
                        .build());
            }
        }

        @Override
        public void onFailedToUpdateConsentInfo(String errorDescription) {
            // User's consent status failed to update.
            loog("consentInformation", "onFailedToUpdateConsentInfo: errorDescription = " + errorDescription);

            mInterstitialAd.loadAd(new AdRequest.Builder()
                    .addTestDevice(TEST_DEVICE_FOR_ADS)
                    .build());
        }
    });
}

Наконец, когда вам нужно решить, показывать ли вам объявление или форму согласия, выможно использовать такую ​​логику: (shouldShowAd - необязательный логический тип, который я хотел бы добавить для большей ясности)

0 голосов
/ 30 мая 2018

То, что вы называете «формой согласия, предоставленной Google», - это библиотека с открытым исходным кодом, созданная Google для отображения и сбора согласия пользователей.

Согласно GDRP, эта форма согласия должна отражать политику конфиденциальности всех поставщиков admob.Но эта библиотека ограничена, чтобы показать до 12 провайдеров.

Таким образом, у вас есть 3 варианта:

1 - Вы ограничиваете себя в использовании 12 поставщиков ADOBOB.

2 - Вы делаете свою собственную форму согласия.

3- Вы загружаете форму согласия библиотеки Google с github и изменяете ее, чтобы показать всем поставщикам рекламы

...