Come richiedere annunci AdMob non personalizzati con il nuovo SDK della piattaforma di messaggistica unificata per Android

Aug 18 2020

Attualmente sto utilizzando la libreria per il consenso di Google (obsoleta) per richiedere il consenso per gli annunci personalizzati dagli utenti europei. La documentazione specifica che se lo stato del consenso di un utente è già impostato su PERSONALIZED o NON_PERSONALIZED, puoi inoltrare il consenso a Google Mobile Ads SDK con:

Bundle extras = new Bundle();
extras.putString("npa", "1");

AdRequest request = new AdRequest.Builder()
    .addNetworkExtrasBundle(AdMobAdapter.class, extras)
    .build();

Ora voglio eseguire la migrazione al nuovo SDK della piattaforma di messaggistica unificata per Android . La documentazione è piuttosto semplice, ma spiega solo come ottenere il consenso, non come utilizzare il consenso. Ciò significa che quando si utilizza il nuovo SDK UMP per Android, non è più necessario impostare "npa"è "1"quando si richiede un annuncio AdMob per un utente che non ha acconsentito agli annunci personalizzati?


MODIFICA 25 agosto 2020

Ieri ho trovato questa conversazione in cui qualcuno del team Mobile Ads SDK ha risposto alla stessa domanda che ho posto qui. Lui dice che:

L'eredità "Passaggio del consenso" tramite npa = 1 verrà rispettata dal nostro SDK fino a nuovo avviso.


MODIFICA 31 agosto 2020

Ho iniziato una nuova conversazione in cui pongo la stessa domanda di quella in questo post, ma non ricevo alcuna risposta.

Risposte

1 Alexander Oct 07 2020 at 21:12

Con la nuova piattaforma di messaggistica unificata, Google funziona come piattaforma di gestione del consenso . Questi CMP utilizzano una stringa TCF per memorizzare le preferenze di consenso dell'utente. Google controlla questa stringa TCF per vedere quali annunci possono essere visualizzati;

Secondo la documentazione di Google :

Google offrirà annunci personalizzati quando vengono soddisfatti tutti i seguenti criteri:

  1. L'utente finale concede a Google il consenso per memorizzare e / o accedere alle informazioni su un dispositivo
  2. Crea un profilo di annunci personalizzati
  3. Seleziona annunci personalizzati

E per Google viene stabilito un interesse legittimo (o consenso, laddove un editore configura il proprio CMP per richiederlo) a:

  1. Seleziona annunci di base
  2. Misura il rendimento degli annunci
  3. Applica ricerche di mercato per generare approfondimenti sul pubblico
  4. Sviluppa e migliora i prodotti

Se i requisiti di consenso per gli annunci personalizzati non vengono soddisfatti, Google pubblicherà annunci non personalizzati quando vengono soddisfatti tutti i seguenti criteri:

  1. Archivia e / o accedi alle informazioni su un dispositivo

Viene stabilito un legittimo interesse (o consenso, laddove un editore configura il proprio CMP per richiederlo) affinché Google:

  1. Seleziona annunci di base
  2. Misura il rendimento degli annunci
  3. Applica ricerche di mercato per generare approfondimenti sul pubblico
  4. Sviluppa e migliora i prodotti
  5. Abilita Google nell'elenco dei fornitori.

Aggiornamento 20 ottobre: ​​apparentemente 3,4,5 non sono più necessari per mostrare annunci non personali SO @Georg per fornire queste informazioni.

Se nessuna delle condizioni di cui sopra è soddisfatta, Google non mostrerà annunci ..

Spero che questo risponda alla tua domanda, ma se hai bisogno di maggiori informazioni per favore fatemelo sapere!

Frank Nov 03 2020 at 05:44

Ricorda solo queste frasi:

Non mollare mai e il bicchiere è sempre mezzo pieno :-) -> essere ottimisti!

Quindi "non ci sarà" più una soluzione per cambiare ciò che è valido in europa. Quello che possiamo fare è questo:

Dopo che l'utente ha premuto "Accetto" o "Invia" nel modulo delle scelte di finanziamento, alcuni parametri verranno salvati nelle preferenze condivise predefinite su Android quando la finestra di dialogo viene chiusa !! La stessa cosa sta accadendo su IOS (quindi tutti potrebbero programmare questa soluzione facilmente anche in modo rapido

Come prima, è "nostro" diritto offrire un'app limitata. Ciò significa che come prima puoi offrire una versione leggera con restrizioni e una versione completa da acquistare.

Quindi quello che possiamo fare è leggere le chiavi pref.

Le chiavi delle preferenze per il quadro per la trasparenza e il consenso sono descritte qui: https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md#in-app-details

Abbiamo bisogno dei seguenti tasti pref per leggere (Android o IOS):

IABTCF_PurposeLegitimateInterests

IABTCF_VendorConsents

IABTCF_PurposeConsents

Quindi, a seconda di questi valori, possiamo controllare se gli annunci vengono offerti o gli annunci "non" vengono offerti dopo che il modulo è stato eliminato.

Quindi puoi bloccare le opzioni importanti nella tua app e magari mostrare una finestra di dialogo:

"Gli annunci sono disattivati. Stai utilizzando la versione leggera dell'app in questo momento. Puoi cambiare idea o acquistare una versione pro ecc. Ecc. Ecc."

-> Forse aggiungi pulsanti dopo la spiegazione "abilita annunci" e mostra di nuovo il modulo o "acquista Pro"

Dipende da te cosa ci fai qui!

La mia classe è in kotlin o java!

Cosa devi fare: metti l'SDK UMP di Google nella tua dipendenza in gradle e imposta le scelte di finanziamento per la tua app nel tuo account AdMob! Quindi scrivi le tue routine per impostare i moduli per le scelte di finanziamento.

Nelle scelte di finanziamento aggiungi solo "Google" come fornitore!

https://developers.google.com/admob/ump/android/quick-start

Devi ancora programmare molte cose da solo per mantenere tutto in esecuzione, ma questa classe ti aiuterà almeno a ottenere le informazioni se gli annunci vengono offerti o meno. Inoltre devi informarti su come funziona tutto per approfondire questo aspetto.

RICORDA !!!

Prova sempre con gli ID di prova in admob !! Non utilizzare mai gli ID di produzione o potresti avere problemi con il tuo account! Crea una nuova app di test in adMob con ID di prova solo se vuoi prima fare i test !!!

Come usare la classe:

Consentfunctions consentfunction; 


consentfunction = new Consentfunctions(this);



// Check if Ads are serving

if (consentfunction.AdsAreServing()) {

// No need to do anything because everything is fine

} else {

// Decide what to do here. Block important functions of your app
//  and open a help page with explanations etc. etc


}

Codice Java:

public class ConsentFunctions {

private ConsentInformation consentInformation;

SharedPreferences.Editor editor;


  private Context mContext;



private String consinfosaved;

private String vendorconsent;

private SharedPreferences preferences;

private String LegitimateInterests;


public ConsentFunctions(Context context){

    mContext = context;


    preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
    



    consentInformation = UserMessagingPlatform.getConsentInformation(mContext);


}



public Boolean AdsAreServing() {

    vendorconsent = preferences.getString("IABTCF_VendorConsents", "");
    LegitimateInterests = preferences.getString("IABTCF_PurposeLegitimateInterests", "");


    // Not required = not in europe -- return true because everything is fine !
    if (consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.NOT_REQUIRED) {
        return true;
    }


    Boolean vendoractive = vendorconsent.contains("1");
    consinfosaved = preferences.getString("IABTCF_PurposeConsents", "0");

    switch (consinfosaved) {


        case "1011":    // Personal 1 - rest legitimate interest
        case "1111111011":  // Personal 2
        case "1111001011":  // Personal 3
        case "1000001011":  // Non personal ok
        case "1100001011":  // Non Peronal ok
        case "11":   // Non Personal ok - rest is legitimate interest
        case    "1111001001":
        case "1":  // Non personalized


        {

            // Check also if vendor is activated
            if (!vendoractive) {
                return false;

            }
            else {

                // Legitimate must be always =  0100111011 and vendor contains 1
                if (LegitimateInterests.equals("0100111011") || LegitimateInterests.equals("0100001011"))
                return true;
                else
                    return false;

            }

        }


        default: {


            return false;



        }



    }


}


}

Codice Kotlin:

class ConsentFunctionsKotlin(private val mContext: Context) {


private val consentInformation: ConsentInformation
var editor: SharedPreferences.Editor


private var consinfosaved: String? = null
private var vendorconsent: String? = null
private val preferences: SharedPreferences
private var LegitimateInterests: String? = null



init {
    preferences = PreferenceManager.getDefaultSharedPreferences(mContext)
   
    consentInformation = UserMessagingPlatform.getConsentInformation(mContext)
}





fun AdsAreServing(): Boolean {
    vendorconsent = preferences.getString("IABTCF_VendorConsents", "")
    LegitimateInterests = preferences.getString("IABTCF_PurposeLegitimateInterests", "")


    // Not required = not in europe -- return true because everything is fine !
    if (consentInformation.consentStatus == ConsentInformation.ConsentStatus.NOT_REQUIRED) {
        return true
    }


    val vendoractive = vendorconsent!!.contains("1")
    consinfosaved = preferences.getString("IABTCF_PurposeConsents", "0")

    return when (consinfosaved) {
        "1111001001","1011", "1111111011", "1111001011", "1000001011", "1100001011", "11", "1" -> {


            // Check also if vendor is activated
            if (!vendoractive) {
                false
            } else {

                // Legitimate must be always =  0100111011 and vendor contains 1
                if (LegitimateInterests == "0100111011" || LegitimateInterests == "0100001011") true else false
            }
        }
        else -> {
            false
        }
    }


}

}