unity paga funciona cuanto como admob cookieconsent

paga - ¿A quién selecciono como mis proveedores de tecnología de publicidad Admob?



admob sdk (3)

En cumplimiento del GDPR, Google dice que debo ''Seleccionar proveedores de tecnología publicitaria'' y obtener el consentimiento de los usuarios. Pero el formulario de consentimiento presentado por Google no es compatible si alguna de las ID de editor utiliza el conjunto de proveedores de tecnología publicitaria más utilizado. Esto significa que debo elegir manualmente los proveedores de tecnología publicitaria para mi cuenta para evitar obtener el consentimiento de mí mismo con la opción ''con la opción de recopilación de consentimiento administrada por el editor''. Aquí estoy en blanco.

¿Cuáles debería elegir, y qué diferencia hace si no uso la mediación y solo uso el comando admob? ¿Debo usar un solo proveedor, es decir, Google?

Edit: Gracias por los downvotes. Sinceramente, no entiendo por qué esta no es una pregunta válida, excepto que tal vez debería haberse preguntado en otro lugar, para lo cual busco orientación.


He estado tratando de responderme esa pregunta durante una semana ya. Esto es lo que hago.

Verifique su cuenta de Adsense, vaya a "Informes avanzados"> "Redes publicitarias" y verá Todos los proveedores de tecnologías de publicidad de los que su aplicación ha recibido publicidad, que le darán una idea de qué proveedores de publicidad serían buenos para usted.

Si su aplicación es nueva y no tiene ningún dato, sugeriría ir solo con Google (predeterminado).

En mi caso particular, mi aplicación ha estado funcionando durante 8 meses con 450 instalaciones y 45 instalaciones activas.

Google Networks reporta un 91.5% en impresiones y un 97.3% en ganancias estimadas.

OMI que tiene a Google como único proveedor se verá mejor cuando el usuario quiera ver con quién comparte la información la aplicación, en lugar de tener una lista de 12 de las cuales nunca se ha escuchado. Al principio, pensé en elegir los mejores 12, pero por los números no tiene mucho sentido y optó por seguir solo con Google.

DESCARGO DE RESPONSABILIDAD: No sé nada con respecto a las redes publicitarias y elijo Google debido a mi historial de Admob y nada más.


Lo que usted llama "formulario de consentimiento presentado por Google" es una biblioteca de código abierto creada por Google para mostrar y recopilar el consentimiento de los usuarios.

Según GDRP, este formulario de consentimiento debe mostrar la política de privacidad de todos los proveedores de admob. Pero esta biblioteca está limitada a mostrar hasta 12 proveedores.

Así que tienes 3 opciones:

1- Te limitas a usar 12 proveedores de admob.

2- Usted hace su propio formulario de consentimiento.

3- Usted descarga el formulario de consentimiento de la biblioteca de Google de github y lo modifica para mostrar todos los proveedores de anuncios.


Ok, así que terminé implementando mi propio mecanismo de consentimiento. Creo que cumple con los requisitos, por lo que para el beneficio de los demás, aquí está:

Primero, declara estas variables. Se utilizarán para decidir si necesita mostrar un formulario de consentimiento:

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

Utilice este método para decirle al usuario que va a pedir su consentimiento:

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(); }

Luego, este método le dará 3 opciones al usuario: otorgar su consentimiento, no otorgar su consentimiento o eliminar todos los anuncios:

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(); }

Si el usuario pulsa en Más información (la cuarta opción en el menú de arriba), se les presentará una lista de todos los proveedores a los que pueden tocar para ver sus respectivas políticas de privacidad:

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(); }

Tenga en cuenta que también he implementado análisis de base de fuego en esto, pero puede eliminar las líneas relacionadas con "params" si no desea registrar estos eventos.

Puedes ver el estado del consentimiento usando este método:

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()); } }); }

Finalmente, cuando necesita decidir si mostrar un anuncio o mostrar un formulario de consentimiento, puede usar una lógica como esta: (shouldShowAd es un booleano opcional que me gustaría poner para mayor claridad)

if (shouldShowAd) { if (shouldShowConsentForm) { if (!goAdFreeChosen) showConsentDialogIntro(DrawerAndFragmentActivity.this); goAdFreeChosen = false; } else { if (mInterstitialAd != null) if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); } } }