Comment demander des annonces AdMob non personnalisées avec le nouveau SDK de la plate-forme de messagerie unifiée pour Android

Aug 18 2020

J'utilise actuellement la bibliothèque de consentement de Google (obsolète) pour demander le consentement des annonces personnalisées d'utilisateurs européens. La documentation précise que si le statut de consentement d'un utilisateur est déjà défini sur PERSONALIZED ou NON_PERSONALIZED, vous pouvez transférer votre consentement au SDK Google Mobile Ads avec:

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

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

Je souhaite maintenant migrer vers le nouveau SDK de la plate-forme de messagerie unifiée pour Android . La documentation est assez simple, mais elle explique seulement comment obtenir le consentement, pas comment utiliser le consentement. Cela signifie-t-il que lorsque nous utilisons le nouveau SDK UMP pour Android, nous n'avons plus besoin de définir la valeur " "npa"is" "1"lorsque nous demandons une annonce AdMob pour un utilisateur qui n'a pas accepté les annonces personnalisées?


EDIT 25 août 2020

Hier, j'ai trouvé cette conversation dans laquelle un membre de l'équipe du SDK Mobile Ads a répondu à la même question que j'ai posée ici. Il dit que:

L'héritage «Passage du consentement» via npa = 1 sera respecté par notre SDK jusqu'à nouvel ordre.


EDIT 31 août 2020

J'ai commencé une nouvelle conversation où je pose la même question que celle de ce post, mais je n'obtiens aucune réponse.

Réponses

1 Alexander Oct 07 2020 at 21:12

Avec la nouvelle plate-forme de messagerie unifiée, Google fonctionne comme une plate-forme de gestion du consentement . Ces CMP utilisent une chaîne TCF pour stocker les préférences de consentement de l'utilisateur. Google vérifie cette chaîne TCF pour voir quelles annonces peuvent être diffusées;

Selon la documentation Google :

Google diffusera des annonces personnalisées lorsque tous les critères suivants sont remplis:

  1. L'utilisateur final autorise Google à stocker et / ou à accéder aux informations sur un appareil
  2. Créez un profil d'annonce personnalisé
  3. Sélectionnez des annonces personnalisées

Et l'intérêt légitime (ou le consentement, lorsqu'un éditeur configure son CMP pour le demander) est établi pour que Google:

  1. Sélectionnez des annonces de base
  2. Mesurer les performances des annonces
  3. Appliquer des études de marché pour générer des informations sur l'audience
  4. Développer et améliorer les produits

Si les conditions de consentement pour les annonces personnalisées ne sont pas remplies, Google diffusera des annonces non personnalisées lorsque tous les critères suivants sont remplis:

  1. Stocker et / ou accéder aux informations sur un appareil

L'intérêt légitime (ou le consentement, lorsqu'un éditeur configure son CMP pour le demander) est établi pour que Google:

  1. Sélectionnez des annonces de base
  2. Mesurer les performances des annonces
  3. Appliquer des études de marché pour générer des informations sur l'audience
  4. Développer et améliorer les produits
  5. Activez Google dans la liste des fournisseurs.

Mise à jour du 20 octobre: ​​Apparemment, 3,4,5 ne sont plus nécessaires pour afficher des publicités non personnelles SO @Georg pour fournir ces informations.

Si aucune des conditions ci-dessus n'est remplie, Google ne diffusera pas d'annonces.

J'espère que cela répond à votre question mais si vous avez besoin de plus d'informations, faites-le moi savoir!

Frank Nov 03 2020 at 05:44

Rappelez-vous simplement ces phrases:

N'abandonnez jamais et le verre est toujours à moitié plein :-) -> pour être optimiste!

Il n'y aura donc "plus" de solution pour changer ce qui est valable en Europe. Voici ce que nous pouvons faire:

Une fois que l'utilisateur a cliqué sur "Accepter" ou sur "Soumettre" dans le formulaire de choix de financement, certains paramètres seront enregistrés dans les préférences partagées par défaut sur Android lorsque la boîte de dialogue est fermée! La même chose se passe sur IOS (pour que tout le monde puisse programmer cette solution facilement et rapidement

Comme avant, c'est "notre" droit de proposer une application limitée. Cela signifie que, comme avant, vous pouvez proposer une version légère avec des restrictions et une version complète à acheter.

Donc, ce que nous pouvons faire est de lire les clés pref.

Les clés de préférences du cadre de transparence et de consentement sont décrites ici: https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md#in-app-details

Nous avons besoin des clés de préférence suivantes pour lire (Android ou IOS):

IABTCF_PurposeLegitimateInterests

IABTCF_VendorConsents

IABTCF_PurposeConsents

Ainsi, en fonction de ces valeurs, nous pouvons vérifier si les annonces sont diffusées ou si les annonces ne sont «pas» diffusées une fois le formulaire ignoré.

Ensuite, vous pouvez bloquer les options importantes dans votre application et peut-être afficher une boîte de dialogue:

"Les annonces sont désactivées. Vous utilisez actuellement la version allégée de l'application. Vous pouvez changer d'avis ou acheter une version professionnelle, etc., etc."

-> Peut-être ajouter des boutons après l'explication "activer les annonces" et afficher à nouveau le formulaire ou "acheter Pro"

C'est à vous de décider ce que vous faites ici!

Ma classe est en kotlin ou en java!

Ce que vous avez à faire: placez le SDK UMP de Google vers votre dépendance dans gradle et configurez les choix de financement pour votre application dans votre compte admob! Ensuite, écrivez vos routines pour configurer les formulaires de choix de financement.

Dans les choix de financement, ajoutez uniquement "Google" en tant que fournisseur!

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

Vous devez encore programmer beaucoup de choses par vous-même pour que tout fonctionne, mais ce cours vous aidera au moins à obtenir les informations si des publicités sont diffusées ou non. Vous devez également vous informer de la façon dont tout fonctionne pour approfondir cela.

RAPPELLES TOI !!!

Testez toujours avec les identifiants de test dans admob !! N'utilisez jamais d'identifiants de production ou vous pourriez avoir des problèmes avec votre compte! Créez une nouvelle application de test dans admob avec des identifiants de test uniquement si vous voulez d'abord faire des tests !!!

Comment utiliser 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


}

Code 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;



        }



    }


}


}

Code 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
        }
    }


}

}