Transmission du consentement aux SDK partenaires
C'est la partie qui fait fonctionner la publicité — et c'est aussi celle qui vous demande le moins de code.
Comme toute CMP conforme IAB, Sirdata CMP publie le consentement via les clés de stockage in-app standard. Les SDK partenaires conformes — Google Mobile Ads, Prebid Mobile, AppLovin, Amazon APS et les autres — lisent ces clés d'eux-mêmes. Pour les SDK les plus courants qui ne le font pas, ou pas entièrement, le SDK Sirdata embarque des adaptateurs de consentement qui transmettent chaque choix à votre place.
Android
SharedPreferences (fichier par défaut)
PreferenceManager.getDefaultSharedPreferences()
iOS
NSUserDefaults.standard
UserDefaults.didChangeNotification
SDK par SDK
Ce dont chaque SDK courant a besoin, vérifié avec les vraies bibliothèques.
Google Mobile Ads (AdMob, Ad Manager)
Oui
—
Rien
AppsFlyer
Seulement si on le lui demande
Adaptateur de consentement
enableTCFDataCollection(true) — détails
Versions vérifiées : Google Mobile Ads 25.5.0 (Android) ; Firebase Analytics 23.2.0 (Android) et 12.19.2 (iOS) ; AppsFlyer 7.0.1 (Android) et 7.0.2 (iOS) ; Adjust 5.8.0 ; Branch 5.21.3 (Android) et 3.14.2 (iOS) ; Meta 18.3.0 (Android — le SDK Meta iOS n'a pas été mesuré).
Google Mobile Ads ne demande aucun code : ses requêtes publicitaires portent la chaîne TC stockée, la chaîne Additional Consent et la chaîne GPP. Initialisez Sirdata CMP en premier, et chargez les publicités une fois le consentement collecté.
Les clés maintenues par le SDK
IAB TCF v2.2
IABTCF_CmpSdkID
92 — écrit de façon synchrone dès initialize()
IABTCF_CmpSdkVersion
10, la version de CMP que porte la chaîne TC — pas la version du SDK (2.0.0). Écrite avec IABTCF_CmpSdkID
IABTCF_PolicyVersion
Version de la politique TCF, tirée de la Global Vendor List chargée (5 au premier lancement, en attendant son chargement)
IABTCF_gdprApplies
1 / 0
IABTCF_PublisherCC
Code pays de l'éditeur
IABTCF_PurposeOneTreatment
Indicateur de traitement spécifique de la finalité 1
IABTCF_UseNonStandardTexts
Indicateur de textes non standard
IABTCF_TCString
La chaîne TC
IABTCF_VendorConsents / IABTCF_VendorLegitimateInterests
Champs de bits partenaires
IABTCF_DisclosedVendors
Champ de bits des partenaires présentés
IABTCF_PurposeConsents / IABTCF_PurposeLegitimateInterests
Champs de bits finalités
IABTCF_SpecialFeaturesOptIns
Opt-in aux fonctionnalités spéciales
IABTCF_PublisherRestrictions{ID}
Restrictions éditeur par finalité
IABTCF_PublisherConsent / IABTCF_PublisherLegitimateInterests
Consentement éditeur
IABTCF_PublisherCustomPurposesConsents / IABTCF_PublisherCustomPurposesLegitimateInterests
Champs de bits des finalités personnalisées de l'éditeur
IABTCF_AddtlConsent
Chaîne Google Additional Consent
IABTCF_EnableAdvertiserConsentMode
1 quand la configuration laisse les signaux publicitaires à Google (Firebase Analytics), absente sinon
GPP et CCPA / USP
IABGPP_HDR_GppString
Chaîne GPP complète
IABGPP_GppSID
Identifiants des sections en vigueur, joints par _ (par exemple 2, ou 2_6_7)
IABGPP_HDR_Version
Version de l'en-tête GPP : 1, ou 0 tant que la chaîne GPP est vide
IABGPP_HDR_Sections
Identifiants des sections présentes dans la chaîne, joints par _
IABGPP_[SectionID]_String
Une clé par section présente : IABGPP_2_String (TCF EU v2, la chaîne TC elle-même), IABGPP_6_String (US Privacy), IABGPP_7_String (US National)
IABUSPrivacy_String
Chaîne US Privacy, par exemple 1YN-. Absente tant qu'aucun choix US n'est enregistré — enregistré depuis l'écran US de l'interface de consentement, ou passé à setCcpaOptOut()
Les sections 6 et 7 ne sont présentes que si l'US Privacy s'applique à l'utilisateur et que la configuration ne la désactive pas ; la section 6 exige en plus un choix US enregistré.
Quand les clés apparaissent. Pendant initialize() : IABTCF_CmpSdkID, IABTCF_CmpSdkVersion et IABTCF_PolicyVersion. Une fois la configuration chargée, avant tout choix : IABTCF_gdprApplies, de nouveau IABTCF_PolicyVersion (tirée de la Global Vendor List chargée), IABTCF_PublisherCC, IABTCF_PurposeOneTreatment, IABTCF_UseNonStandardTexts, les chaînes de bits éditeur, qui portent alors les valeurs par défaut du SDK et non un choix, IABTCF_EnableAdvertiserConsentMode quand elle s'applique, et, pour un utilisateur américain, les clés GPP avec la section US National. Seulement une fois un choix enregistré : la chaîne TC, les champs de bits finalités et partenaires, les opt-in aux fonctionnalités spéciales, les restrictions éditeur, IABTCF_AddtlConsent, et les clés GPP des autres utilisateurs. IABUSPrivacy_String attend un choix US. Pour savoir si un choix est enregistré, testez IABTCF_TCString.
L'API de commandes in-app
Les SDK partenaires qui préfèrent l'interface de commandes au stockage brut peuvent appeler l'API TCF in-app — l'équivalent de __tcfapi :
Un écouteur enregistré avec addEventListener est rappelé quand la CMP est chargée, quand l'interface de consentement s'affiche, quand un choix est enregistré et quand l'interface se ferme. Le deuxième argument de chaque appel est l'identifiant de l'écouteur, à passer à removeEventListener.
En 2.0.0, ces appels ne portent pas d'eventStatus. Le premier argument est la donnée TC courante une fois la CMP chargée, et le nom de l'événement avant ; l'appel fait juste après l'enregistrement porte "tcloaded". Un écouteur ne peut donc pas distinguer tcloaded, cmpuishown, useractioncomplete et cmpuiclosed : à chaque appel, relisez les valeurs courantes — les clés IABTCF_ stockées, ou getInAppTCData — plutôt que de vous fier à l'événement reçu.
Les interfaces de commandes équivalentes gppApi() et uspApi() existent ; les événements des écouteurs GPP portent bien leur nom, dans eventName. Quand la configuration laisse les signaux publicitaires à Google, ping et getTCData portent aussi enableAdvertiserConsentMode: true, comme sur le web. Listes des commandes : Référence — Android et Référence — iOS.
Adaptateurs de consentement
À chaque enregistrement d'un choix — depuis l'interface de consentement, ou par acceptAll(), rejectAll(), saveConsent() ou submitConsent() — le SDK traduit le choix TCF en signaux de consentement Google (ad_storage, analytics_storage, ad_user_data, ad_personalization) et les transmet à chaque adaptateur dont le SDK est présent dans l'application. Rien à enregistrer, rien à importer : un adaptateur est actif dès que son SDK est lié.
Firebase Analytics
Consent Mode v2 (setConsent) — voir Firebase Analytics
AppsFlyer
setConsentData : application du RGPD, usage des données, personnalisation publicitaire, stockage publicitaire
Adjust
Consentement à la mesure (ad_storage), et les signaux Google DMA en options de partage google_dma
Branch
Suivi désactivé tant que ad_storage est refusé, et les signaux Google DMA (setDMAParamsForEEA)
La transmission a lieu à l'enregistrement d'un choix, pas au lancement. Firebase, Adjust et Branch gardent d'une session à l'autre ce qu'ils ont reçu en dernier. AppsFlyer ne le garde que pour la session — voir AppsFlyer.
Pour vérifier ce qui a été transmis :
getRegisteredAdapters()(les adaptateurs dont le SDK est présent) etgetLastForwardedConsentState().Un adaptateur en échec le signale dans les logs — tag Logcat
SirDataCMPsur Android,[CMP]dans la console Xcode sur iOS — par exempleConsent adapter 'Branch' failed to forward consent: …. Cela n'affecte ni les autres adaptateurs, ni votre application.Builds release Android : le SDK livre les règles R8 dont ses adaptateurs ont besoin. Rien à ajouter à votre
proguard-rules.pro.iOS : les adaptateurs s'exécutent dans le SDK, via le runtime Objective-C. Ils fonctionnent de la même façon avec Swift Package Manager et CocoaPods, avec ou sans l'interface de consentement fournie. Un adaptateur est actif quand les classes de son SDK sont liées à l'application — pour Firebase Analytics via Swift Package Manager, c'est l'option d'édition de liens
-ObjCque Firebase exige déjà.
Firebase Analytics
Aucun code. N'appelez pas setConsent vous-même pour les signaux que l'adaptateur transmet : une valeur posée par l'application l'emporte sur celle que Firebase dérive de la chaîne TC.
Ce que transmet l'adaptateur dépend de l'option de configuration Enable TCF/Google Consent Mode Interoperability, dans la Console Sirdata :
Désactivée (par défaut) : les quatre signaux,
analytics_storage,ad_storage,ad_user_dataetad_personalization, à chaque choix.Activée :
analytics_storageseul. Le SDK écritIABTCF_EnableAdvertiserConsentMode=1, et Firebase dérive lui-même les trois signaux publicitaires de la chaîne TC. C'est ce que fait la CMP web avec la même option.Le moment où Firebase lit la chaîne TC dépend de la plateforme. Sur Android, il la relit dès qu'elle change. Sur iOS, il la lit au lancement de l'application et à son retour au premier plan : avec cette option, un nouveau choix — refus compris — n'atteint les trois signaux publicitaires qu'à ce moment-là. Option désactivée, les quatre signaux sont posés immédiatement sur les deux plateformes : si un refus doit atteindre Firebase immédiatement sur iOS aussi, laissez l'option désactivée.
Pour le constater sur Android, activez les logs détaillés de Firebase (adb shell setprop log.tag.FA VERBOSE) et enregistrez un choix : avec l'option, Firebase écrit Consent generated from Tcf, puis les événements partent avec consent_signals: G111 après un « Tout accepter » (G1 + stockage publicitaire + stockage analytics, 1 accordé, 0 refusé).
AppsFlyer
Demandez à AppsFlyer de lire les clés IAB, avant start() :
AppsFlyer envoie alors la chaîne TC stockée avec ses requêtes (consent_data.tcf). Au premier lancement, sa requête de lancement part avant tout choix, avec des clés vides, et sur Android il ne les relit pas pendant la session : l'adaptateur comble ce manque en transmettant chaque choix par setConsentData (consent_data.manual), que portent les requêtes suivantes.
Adjust et Branch
Aucun des deux ne lit les clés IAB ; les adaptateurs leur transmettent chaque choix. Aucun code.
Sur Android, initialisez Branch comme d'habitude (Branch.getAutoInstance(context) dans Application.onCreate()) : avant cela, Branch n'a aucune instance pour recevoir le consentement, et l'adaptateur signale que Branch n'est pas encore initialisé.
Conditionner un SDK non IAB
Conditionnez vous-même les SDK qui ne lisent pas les clés IAB aux finalités ou aux partenaires dont ils dépendent, au démarrage et à chaque changement. L'exemple ci-dessous conditionne Meta à la finalité 1 (stocker des informations sur un appareil et/ou y accéder). Désactivez d'abord le démarrage automatique du SDK : com.facebook.sdk.AutoInitEnabled, com.facebook.sdk.AutoLogAppEventsEnabled et com.facebook.sdk.AdvertiserIDCollectionEnabled à false dans le manifeste, chacune sous la forme <meta-data android:name="…" android:value="false"/>.
getConsentUpdates() est un signal, pas une liste de décisions : il change à chaque modification des sélections, y compris chaque bascule que l'utilisateur actionne dans l'interface de consentement avant d'enregistrer, ainsi qu'à chaque choix enregistré. Relisez les valeurs stockées à chaque émission, comme ci-dessous — hasPurposeConsent lit le stockage, si bien qu'une bascule non enregistrée ne change pas sa réponse. Appelez-le après initialize.
Un choix US — enregistré sur l'écran US, ou avec setCcpaOptOut — ne fait pas avancer le compteur. Si vous conditionnez un SDK aux signaux US, relisez getUspString() et getGppString() à la fermeture de l'interface de consentement.
Intégrations Google
Additional Consent (chaîne AC) — maintenue dans
IABTCF_AddtlConsentpour les partenaires publicitaires Google absents de la Global Vendor List du TCF. Lue avecgetAddtlConsent().Consent Mode — le SDK dérive l'état de consentement Google des finalités TCF et le transmet à Firebase Analytics, voir plus haut. Inspection via
getGoogleConsentState().Opt-out CCPA —
setCcpaOptOut(true)/isCcpaOptedOut()pilotent la chaîne USP et les sections US du GPP pour les parcours « Do Not Sell ». AppelezsetCcpaOptOutdepuis un contrôle que l'utilisateur actionne : il enregistre le choix de l'utilisateur lui-même. L'écran US de l'interface de consentement l'appelle quand l'utilisateur enregistre.
WebViews
Pour du contenu web conditionné au consentement dans une WebView, passez la chaîne TC à la page et exposez-la via le stub __tcfapi de la page, ou ajoutez-la à l'URL si votre site l'accepte :
Checklist
Initialiser Sirdata CMP avant chaque SDK publicitaire et analytics.
Collecter le consentement avant de charger la première publicité.
SDK conformes IAB, Firebase Analytics, Adjust et Branch : rien d'autre à faire.
AppsFlyer :
enableTCFDataCollection(true)avantstart().Autres SDK : les conditionner à
hasPurposeConsent(...)/hasVendorConsent(...), et réévaluer à chaque émission degetConsentUpdates()— et, pour les signaux US, à la fermeture de l'interface de consentement.
Mis à jour
Ce contenu vous a-t-il été utile ?
