For the complete documentation index, see llms.txt. This page is also available as Markdown.

Dépannage

Symptôme
Cause et correction

Android : Could not find com.sirdata.cmp:android-sdk

mavenCentral() manque dans vos repositories, ou la version n'existe pas encore — vérifiez la page Versions.

Android : Could not find androidx.compose:compose-bom:2024.02.00, ou un autre artefact androidx

google() manque dans vos repositories : les dépendances AndroidX et Compose du SDK ne sont publiées que sur le dépôt Maven de Google. Déclarez google() et mavenCentral() — voir Installation — Android.

Build iOS : value of type 'X' has no member '<api>'

La couche Swift UI et le framework binaire sont à des versions différentes. Résolvez à nouveau le package, et vérifiez que vous ne mélangez pas un checkout local avec une version publiée.

La bannière réapparaît à chaque lancement

Votre application prend la décision à la place du SDK. Utilisez awaitConsentDisplayDecision() — un consentement partiel doit rouvrir la bannière et une fenêtre de capping doit l'empêcher, et ni l'un ni l'autre ne se lit dans la chaîne TC. Si le workflow de la décision est COOKIEWALL, c'est normal : avec le cookie wall activé, l'interface de consentement revient à chaque lancement tant que l'utilisateur n'a pas accordé la finalité 1.

La bannière n'apparaît jamais

Lisez decision.reason (voir Logs). Une fenêtre de capping active, un consentement stocké complet, ou un RGPD non applicable sont des situations normales.

Un SDK partenaire ne voit pas de consentement

Ordre d'initialisation. La CMP doit être initialisée — et le consentement collecté — avant que le SDK partenaire ne lise le stockage.

Le stockage contient IABTCF_PublisherConsent, ou les clés GPP, avant que l'utilisateur ait fait le moindre choix

C'est normal. Dès que la configuration est chargée, le SDK écrit les clés qui n'attendent pas de choix : IABTCF_gdprApplies, IABTCF_PolicyVersion, IABTCF_PublisherCC, IABTCF_PurposeOneTreatment, IABTCF_UseNonStandardTexts, les chaînes de bits éditeur, qui portent les valeurs par défaut du SDK, et, pour un utilisateur américain, les clés GPP avec la section US National. C'est un choix enregistré qui écrit IABTCF_TCString : c'est cette clé qu'il faut tester. Voir la liste des clés dans Transmission du consentement aux SDK partenaires.

Le code que vous relancez sur getConsentUpdates() ne voit pas une opposition US

Un choix US — enregistré sur l'écran US, ou avec setCcpaOptOut — ne fait pas avancer le compteur en 2.0.0. Relisez getUspString() et getGppString() à la fermeture de l'interface de consentement.

isGdprApplies() renvoie la mauvaise valeur au démarrage

Avant l'arrivée de la configuration éditeur, l'applicabilité est déduite de la géolocalisation de l'appareil. Attendez la configuration. gdprDefaultApplies ne sert que si l'appareil ne déclare aucun pays : fixez-le sur l'hypothèse sûre pour vous.

Le consentement d'un autre éditeur apparaît dans l'app

Le couple partner / config a changé sans effacement du consentement. Une chaîne TC appartient à l'éditeur qui l'a collectée ; effacez le consentement stocké quand vous changez de couple.

Erreur de disponibilité SwiftUI (only available in iOS 16.0 or newer)

Les sources du SDK n'utilisent jamais une API plus récente que leur version minimale : une erreur qui pointe un fichier du SDK signale donc une version du SDK dépassée. Mettez à jour vers la dernière version plutôt que de relever votre deployment target à 16. Votre deployment target doit être au moins iOS 15.0, quel que soit le canal (seul le paquet SPM 1.2.0 déclarait iOS 14.0).

iOS : l'interface de consentement n'affiche qu'un indicateur de chargement, et l'utilisateur ne peut pas la fermer

Problème connu de 2.0.0. Quand la configuration n'a pas pu être chargée à ce lancement — pas de réseau, ou identifiants erronés —, l'interface de consentement n'affiche qu'un indicateur de chargement, sans bouton de fermeture. Une .sheet se ferme encore d'un glissement vers le bas, mais pas avec .interactiveDismissDisabled(), ni en présentation plein écran (UIKit .overFullScreen, showConsentUI() de React Native). Présentez l'interface dans une .sheet que l'utilisateur peut faire glisser. IosCMPApi.shared.getInitError() indique si la configuration n'a pas pu être chargée — voir Logs. Corrigé dans la prochaine version (non publiée) : l'interface de consentement affiche un message et un bouton Fermer.

iOS : l'app se termine au lancement ou à son premier appel au SDK, avec SirDataCMP is already initialized. Call shutdown() first. ou SirDataCMP not initialized. Call initialize() first.

Les exceptions Kotlin ne sont pas converties en erreurs Swift : ces mauvais usages terminent l'application. Appelez IosCMPApi.shared.initialize une seule fois, sur le fil principal — dans App.init() ou application(_:didFinishLaunchingWithOptions:) —, avant tout autre appel au SDK et avant de créer une ConsentView. Les appels concernés sont listés dans Référence — iOS. Corrigé dans la prochaine version (non publiée) : ces appels ne terminent plus l'application.

CocoaPods : pod install échoue sur « required a higher minimum deployment target »

Le pod SirdataCMP, et le pod du module React Native qui en dépend, exigent iOS 15.0. Indiquez platform :ios, '15.0' (ou plus) dans votre Podfile, puis relancez pod install.

Swift Package Manager reste en 1.2.0 après la mise à jour des packages

Une règle « Up to Next Major Version » à partir de 1.2.0 ne résout jamais 2.0.0 : une nouvelle version majeure en sort. Faites partir la règle de 2.0.0 — dans Xcode, dans les Package Dependencies du projet ; dans Package.swift, from: "2.0.0" — et passez votre deployment target à iOS 15.0 au moins.

Build release Android (R8) : Missing class org.slf4j.impl.StaticLoggerBinder

La version 1.2.0 ne livrait pas de règles R8. Passez à 2.0.0, qui embarque ses propres règles, dont celle-ci et celles dont les adaptateurs de consentement ont besoin, puis retirez les règles que vous aviez ajoutées pour le SDK. Avec 1.2.0, -dontwarn org.slf4j.impl.StaticLoggerBinder fait passer le build, mais l'adaptateur Firebase Analytics n'envoie alors plus rien dans un build minifié.

React Native : The package '@sirdata/react-native-cmp' doesn't seem to be linked

Le code natif du module n'est pas dans l'application : elle tourne dans Expo Go, qui ne charge pas de code natif personnalisé, ou elle n'a pas été reconstruite après l'installation du paquet. Utilisez un development build Expo (npx expo run:ios, npx expo run:android) ou une app React Native classique ; lancez pod install dans ios/, puis reconstruisez. Voir Installation — React Native.

React Native sur Android : initialize est rejeté avec E_INIT et SirDataCMP.initialize() was called off the main thread

En 2.0.0 et 2.0.1, le pont Android appelle initialize hors du fil principal, et debugMode: true transforme cela en erreur. Ne passez pas debugMode: true sur Android. Sans lui, le SDK se contente d'écrire la même ligne sous le tag Logcat SirDataCMP. Voir Installation — React Native.

React Native sur iOS : l'application plante sur shouldCollectConsent(), acceptAll() ou rejectAll(), même après la résolution d'initialize()

Un défaut de la version 2.0.0 du paquet : React Native appelle ces méthodes hors du fil principal, où le SDK natif ne peut pas les exécuter. Passez à 2.0.1, puis reconstruisez l'application iOS. Voir Installation — React Native.

Obtenir de l'aide

Indiquez, dans cet ordre : la version du SDK et la plateforme, votre partner ID et votre config ID, ce que decision.reason a retourné, et si IABTCF_CmpSdkID est présent dans le stockage. Ces quatre réponses résolvent la plupart des cas sans aller-retour.

Mis à jour

Ce contenu vous a-t-il été utile ?