Leading Consent Management Platform

Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.

Comment intégrer le SDK CMP UniConsent pour Android avec les applications mobiles

UniConsent CMP est un package pour la gestion du consentement RGPD IAB TCF 2.4 dans les applications Android. Vous pouvez trouver une application de démonstration intégrée avec UniConsent CMP dans le répertoire "demo".

Prérequis

  • Abonnement UniConsent CMP avec prise en charge des applications mobiles
  • Niveau API Android 21 ou supérieur
  • Package SDK UniConsent CMP (à demander auprès du support)

Pour commencer

Ajoutez UniConsentSDK-release.aar dans le répertoire libs/ de votre projet et mettez à jour votre build.gradle :

implementation files('libs/UniConsentSDK-release.aar')
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'com.google.android.material:material:1.13.0'
implementation 'com.iabtcf:iabtcf-core:2.0.10'
implementation 'com.iabtcf:iabtcf-decoder:2.0.10'

Personnaliser l'interface de consentement

Avant d'intégrer le SDK, personnalisez l'apparence de la bannière de consentement dans le tableau de bord UniConsent pour correspondre à votre marque et optimiser les taux de consentement.

Étape 1 : Style de marque dans le tableau de bord

Accédez à Projects → Sélectionnez votre projet → Settings → Step 5: UI & Style Settings pour configurer :

  • Main Button Colour — Définissez la couleur du bouton d'action principal pour correspondre à votre marque
  • Main Button Text Colour — Ajustez la couleur du texte sur le bouton principal pour la lisibilité
  • Background Colour — Définissez la couleur de fond de la bannière pour s'harmoniser avec votre application
  • Text Colour — Assurez un contraste approprié pour le texte du corps

Étape 2 : Style avancé avec CSS personnalisé (optionnel)

Pour un contrôle plus précis, ajoutez du CSS personnalisé dans le champ CSS Content sous l'étape 5. Cela est recommandé pour donner à la bannière un aspect natif dans votre application et obtenir le meilleur taux de consentement :

/* Example: Style the accept button to match your brand */
.unic-btn-accept {
  background-color: #4CAF50;
  border-radius: 8px;
  font-weight: 600;
}

/* Example: Adjust banner font */
.unic-banner {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

/* Example: Make the reject button less prominent */
.unic-btn-reject {
  background-color: transparent;
  border: 1px solid #ccc;
  color: #666;
}

Conseil : Une interface de consentement bien adaptée à votre marque et à l'aspect natif de votre application obtient généralement des taux de consentement plus élevés. Les utilisateurs sont plus enclins à réagir positivement à une bannière qui correspond à l'apparence et au ressenti qu'ils attendent.

Utilisation

Pour utiliser la CMP UniConsent dans votre application, suivez ces étapes :

Initialisez la CMP avec un App ID fourni par votre gestionnaire de compte :

UniConsent UniConsentCMP = UniConsent.getInstance();
UniConsentCMP.setAppId("YOUR_APP_ID");
// show the CMP when consent is needed, once the SDK is ready
UniConsentCMP.enableAutoLaunch();
UniConsentCMP.init(this); // this: your Activity

Affichez l'interface de la CMP :

// Display CMP as full-screen page (default)
UniConsent.getInstance().launchCMP();

// Display CMP as a modal bottom sheet
UniConsent.getInstance().launchCMP(CMPDisplayMode.BOTTOM_SHEET);

// Display CMP as a center dialog
UniConsent.getInstance().launchCMP(CMPDisplayMode.DIALOG);

Vous pouvez également lancer avec une étape et un mode d'affichage spécifiques :

// Launch at a specific stage with a display mode
UniConsent.getInstance().launchCMP(Stage.GDPRFirstScreen, CMPDisplayMode.BOTTOM_SHEET);

// Bottom sheet at 70% of the screen height
UniConsent.getInstance().launchCMP(Stage.GDPRFirstScreen, CMPDisplayMode.BOTTOM_SHEET, 0.7);

// Center dialog at 80% width and 60% height
UniConsent.getInstance().launchCMP(Stage.GDPRFirstScreen, CMPDisplayMode.DIALOG, 0.8, 0.6);

// Or set a default display mode for all launches
UniConsent.getInstance().setDisplayMode(CMPDisplayMode.BOTTOM_SHEET);
UniConsent.getInstance().launchCMP();

Taille personnalisée (optionnel)

Disponible à partir de la version 26.8.0 du SDK.

Les deux ratios sont optionnels — chaque mode d'affichage fonctionne sans eux. Ne passez un ratio (une fraction de l'écran, supérieure à 0 et au plus égale à 1) que pour remplacer la taille par défaut ; les valeurs invalides lèvent une IllegalArgumentException :

ParamètreS'applique àValeur par défaut si omis
heightRatioBOTTOM_SHEET, DIALOGBottom sheet : 90 % de l'écran. Dialogue : 70 %
widthRatioDIALOG uniquement90 % de la largeur de l'écran, jusqu'à 500 dp

Les ratios qui ne s'appliquent pas au mode d'affichage choisi sont ignorés (FULL_SCREEN ignore les deux).

Vérifier automatiquement si le consentement a expiré lorsque la vendorList est mise à jour :

// Check if consent should be requested (e.g. first visit, or vendor list updated)
// to check yourself instead of enableAutoLaunch(): subscribe before init(), which runs in the background
// and publishes READY when it finishes (import com.uniconsent.sdk.EventType)
UniConsentCMP.subscribe(event -> {
    if (event.getType() == EventType.READY && UniConsentCMP.shouldRequestConsent()) {
        UniConsentCMP.launchCMP();
    }
});
UniConsentCMP.init(this);

Obtenir le tcString si nécessaire :

// Get tcString
UniConsent.getInstance().getTCString();

Lire le statut du consentement :

// Read consent status
UniConsent.getInstance().hasIABPurposeConsent(1);
UniConsent.getInstance().hasIABVendorConsent(1);

Réinitialiser le statut du consentement si nécessaire :

// Reset consent status
UniConsent.getInstance().clearData();

Premier niveau personnalisé (Tout accepter / Tout refuser)

Disponible à partir de la version 26.7.0 du SDK. Si vous créez votre propre interface de consentement de premier niveau au lieu d'afficher la webview du CMP, vous pouvez enregistrer le consentement directement :

// Grant consent for all purposes, special features and vendors
boolean saved = UniConsent.getInstance().agreeAll();

// Reject all purposes, special features and vendors
boolean saved = UniConsent.getInstance().rejectAll();

Ces deux API enregistrent les mêmes valeurs de consentement que le flux de l'interface CMP (clés IAB TCF, consentement additionnel et signaux de consent mode) et déclenchent le même événement de fermeture pour les abonnés.

Pour les utilisateurs des États-Unis et du Canada, les deux API enregistrent aussi le choix CCPA, US State Privacy et IAB TCF Canada qui les concerne, selon les mêmes règles que l'interface de la CMP, et écrivent les clés IAB GPP et US Privacy. Activez les modes API-Only dans les paramètres du projet du tableau de bord UniConsent pour que la bannière de la CMP ne s'affiche pas dans ces régions.

Elles enregistrent aussi le choix des catégories de cookies là où une bannière de catégories de cookies s'applique (toutes les catégories, ou seulement Strictement nécessaires), ainsi que les finalités et fournisseurs personnalisés du projet.

Pour savoir quel premier niveau afficher, appelez getPolicy() (à partir de la version 26.10.0 du SDK). Elle renvoie la politique qui s'applique à l'utilisateur, selon les mêmes règles que la CMP : gdpr (IAB TCF), tcfca (IAB TCF Canada), uss (US State Privacy), ccpa, categories (voir Catégories de cookies ci-dessous) ou none.

UniConsent cmp = UniConsent.getInstance();
if (cmp.shouldRequestConsent()) {
    // l'utilisateur doit faire un choix : affichez votre premier niveau pour cette politique
    String policy = cmp.getPolicy(); // gdpr, tcfca ou categories
}

Remarque : N'appelez ces API qu'après la fin de init() (par exemple après l'événement READY). Elles nécessitent la liste des fournisseurs et la configuration du projet, récupérées lors de l'initialisation, et renvoient false si le consentement n'a pas pu être enregistré.

Important : Votre premier niveau personnalisé doit toujours respecter les exigences de l'IAB TCF (divulguer les finalités et les fournisseurs, et proposer l'acceptation et le refus avec la même visibilité). Les utilisateurs doivent toujours pouvoir ouvrir l'interface CMP complète (launchCMP()) pour effectuer des choix granulaires.

Synchroniser le consentement avec une WebView

Si votre application ouvre une WebView qui charge une page web avec le tag CMP UniConsent, vous pouvez transmettre le statut de consentement natif afin que le tag CMP reconnaisse le consentement existant et n'affiche pas à nouveau la bannière.

Injectez le consentement au démarrage de la page, avant l'exécution du tag CMP :

WebView webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, android.graphics.Bitmap favicon) {
        UniConsent.getInstance().syncConsent(view);
    }
});

webView.loadUrl("https://example.com");

Exemple avec AppCompatActivity

import com.uniconsent.sdk.CMPDisplayMode;
import com.uniconsent.sdk.Event;
import com.uniconsent.sdk.EventHandler;
import com.uniconsent.sdk.EventType;
import com.uniconsent.sdk.Stage;
import com.uniconsent.sdk.UniConsent;

public class MainActivity extends AppCompatActivity implements EventHandler {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        UniConsent UniConsentCMP = UniConsent.getInstance();
        UniConsentCMP.setAppId("YOUR_APP_ID");
        // show the CMP when consent is needed, once the SDK is ready
        UniConsentCMP.enableAutoLaunch();
        UniConsentCMP.init(this);
        // register callback events
        UniConsentCMP.subscribe(this);
    }

    public void openUniConsentUI(View view) {
        // Full screen
        UniConsent.getInstance().launchCMP(Stage.GDPRFirstScreen);
    }

    public void openAsBottomSheet(View view) {
        // Bottom sheet
        UniConsent.getInstance().launchCMP(Stage.GDPRFirstScreen, CMPDisplayMode.BOTTOM_SHEET);
    }

    public void openAsDialog(View view) {
        // Center dialog
        UniConsent.getInstance().launchCMP(Stage.GDPRFirstScreen, CMPDisplayMode.DIALOG);
    }

    @Override
    public void handle(Event event) {
        UniConsent.getInstance().hasIABVendorConsent(1);
    }
}

Exemple avec ComponentActivity

package com.example.myapplication

import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.example.myapplication.ui.theme.MyApplicationTheme
import com.uniconsent.sdk.CMPDisplayMode
import com.uniconsent.sdk.Event
import com.uniconsent.sdk.EventHandler
import com.uniconsent.sdk.Stage
import com.uniconsent.sdk.UniConsent

class MainActivity : ComponentActivity(), EventHandler {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val cmp = UniConsent.getInstance()
        cmp.setAppId("YOUR_APP_ID")
        // show the CMP when consent is needed, once the SDK is ready
        cmp.enableAutoLaunch()
        cmp.init(this)
        cmp.subscribe(this)

        setContent {
            MyApplicationTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Column(
                        modifier = Modifier
                            .fillMaxSize()
                            .padding(16.dp),
                        verticalArrangement = Arrangement.Center,
                        horizontalAlignment = Alignment.CenterHorizontally
                    ) {
                        Button(onClick = {
                            UniConsent.getInstance().launchCMP(Stage.GDPRFirstScreen)
                        }) {
                            Text("Privacy Settings")
                        }
                        Spacer(modifier = Modifier.height(16.dp))
                        Button(onClick = {
                            UniConsent.getInstance().launchCMP(
                                Stage.GDPRFirstScreen, CMPDisplayMode.BOTTOM_SHEET
                            )
                        }) {
                            Text("Privacy Settings (Bottom Sheet)")
                        }
                        Spacer(modifier = Modifier.height(16.dp))
                        Button(onClick = {
                            UniConsent.getInstance().launchCMP(
                                Stage.GDPRFirstScreen, CMPDisplayMode.DIALOG
                            )
                        }) {
                            Text("Privacy Settings (Dialog)")
                        }
                    }
                }
            }
        }
    }

    override fun handle(event: Event?) {
        Log.d("CMP_EVENT", event.toString())
        UniConsent.getInstance().hasIABVendorConsent(1)
    }
}

Permission

<uses-permission android:name="android.permission.INTERNET" />

Ouvrir un écran précis et autres options

Ouvrez la CMP sur un écran précis, par exemple depuis un lien « Paramètres de confidentialité » de votre app. L'écran demandé s'ouvre toujours. Pour les utilisateurs aux États-Unis, les écrans de paramètres ouvrent les paramètres CCPA ou US State Privacy qui s'appliquent à eux. Les utilisateurs au Canada voient la version IAB TCF Canada des écrans IAB TCF.

ÉcranAffiche
Stage.GDPRFirstScreenPremier niveau (bannière)
Stage.GDPRSecondScreenParamètres (finalités)
Stage.GDPRVendorsScreenFournisseurs
Stage.CCPAFirstScreenPremier niveau CCPA
Stage.CCPASecondScreenParamètres CCPA
Stage.USStateFirstScreenPremier niveau US State Privacy
Stage.USStateSecondScreenParamètres US State Privacy
Stage.CategoriesFirstScreenPremier niveau des catégories de cookies (bannière)
Stage.CategoriesSecondScreenParamètres des catégories de cookies
UniConsent cmp = UniConsent.getInstance();

// ouvrir l'écran des paramètres
cmp.launchCMP(Stage.GDPRSecondScreen);

// afficher la CMP en français au lieu de la langue de l'appareil (code à deux lettres)
cmp.setLanguage("FR");

// journaux de débogage du SDK et de la page CMP ; utilisez LogLevel.ERROR (par défaut) dans les builds de production
cmp.setLogLevel(LogLevel.DEBUG);

// pour les tests uniquement : afficher la CMP comme pour un utilisateur d'une autre région, "EU", "CA" (Canada), "CAQC" (Québec), "US" suivi d'un code d'État comme "USCA" ou "USTX", "BR", "CN", "ZA", "VN" ou tout autre code pays, ou "N" (hors de ces régions). S'applique aussi à getPolicy() et à shouldRequestConsent() ; à retirer des builds de production
cmp.setTestRegion("CA");

// fermer la CMP si elle est ouverte
cmp.dismissCMP();

// l'utilisateur a fait un choix : IAB TCF, CCPA, US State Privacy ou IAB TCF Canada
boolean given = cmp.isConsentGiven();

// jours depuis la création du consentement IAB TCF, 0 s'il n'y en a pas
int days = cmp.getConsentAge();

// région de l'utilisateur et, pour les États-Unis et le Canada, le code de l'État ou de la province (vide si inconnu)
String geo = cmp.getGEO();
String state = cmp.getGEOState();

IAB GPP et US Privacy

La CMP enregistre les clés IAB GPP et la clé US Privacy dans les SharedPreferences par défaut de l'app, telles que les définissent les spécifications de l'IAB. Les SDK publicitaires de votre app les lisent à cet endroit ; aucune modification de code n'est nécessaire. Les clés GPP sont écrites lorsque GPP, US State Privacy ou IAB TCF Canada est activé dans les paramètres du projet du tableau de bord UniConsent. La clé US Privacy est écrite dès que le CCPA est activé.

CléValeur
IABGPP_HDR_VersionVersion GPP (1)
IABGPP_HDR_SectionsID des sections présentes dans la chaîne GPP, séparés par _
IABGPP_HDR_GppStringLa chaîne GPP complète
IABGPP_GppSIDID des sections qui s'appliquent à l'utilisateur, séparés par _, ou -1 si aucune ne s'applique
IABGPP_2_StringChaîne IAB TCF EU, lorsque le RGPD s'applique
IABGPP_5_StringChaîne IAB TCF Canada, lorsque le TCF Canada s'applique
IABGPP_6_StringChaîne US Privacy, lorsque le CCPA s'applique
IABGPP_7_StringChaîne US National (usnat), lorsque US State Privacy ou le CCPA s'applique
IABGPP_8_String à IABGPP_27_StringLa section de l'État de l'utilisateur (8 Californie à 27 Rhode Island), lorsque US State Privacy s'applique, ou la Californie avec le CCPA, selon le paramètre GPP Sections
IABUSPrivacy_StringChaîne US Privacy dès que le CCPA est activé : le choix de l'utilisateur dans la région CCPA, sinon 1---

Les clés sont mises à jour à chaque chargement de la CMP et après chaque choix de consentement. Les utilisateurs qui reçoivent les clés IABGPP_ dépendent de GPP Signals dans les paramètres du projet : les utilisateurs au Canada toujours (IAB TCF Canada), ceux des États-Unis lorsque US est activé et ceux de l'UE lorsque EU est activé. Les utilisateurs qu'aucune région ne couvre reçoivent les clés sans section tant que US ou EU est activé, et aucune clé sinon. Pour les lire vous-même :

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String gppString = prefs.getString("IABGPP_HDR_GppString", "");
String gppSid = prefs.getString("IABGPP_GppSID", "");

États-Unis et Canada

Les apps prennent en charge les mêmes options pour les États-Unis et le Canada que les sites web : CCPA, US State Privacy (avec la liste des États et les paramètres GPP Sections et MSPA) et IAB TCF Canada. shouldRequestConsent() renvoie true pour les utilisateurs du Canada concernés par l'IAB TCF Canada tant qu'ils n'ont pas fait de choix. La confidentialité aux États-Unis fonctionne par opposition (opt-out) : les utilisateurs américains ne sont pas sollicités d'eux-mêmes, ils voient la bannière ou les paramètres américains lorsque votre app ouvre la CMP, par exemple depuis un lien vers les paramètres de confidentialité. D'ici là, lorsque le CCPA ou US State Privacy est activé, le SDK écrit les clés US Privacy et GPP par défaut pour les utilisateurs américains sans rien afficher : sans opposition, ou avec opposition lorsque le suivi publicitaire est désactivé sur l'appareil. US State Privacy est désactivé au départ pour les nouveaux projets Mobile App ; activez-le dans le tableau de bord.

Refus du suivi publicitaire sur l'appareil

Lorsque l'utilisateur a désactivé le suivi publicitaire sur l'appareil, la CMP le traite comme un refus américain de la vente, du partage et de la publicité ciblée, comme le fait Global Privacy Control sur les sites web. Sous iOS, il s'agit du suivi non autorisé dans App Tracking Transparency ; sous Android, d'un identifiant publicitaire supprimé ou de la limitation du suivi publicitaire, lus via les services Google Play lorsque votre app les inclut. Un choix que l'utilisateur enregistre ensuite dans la bannière est prioritaire.

Lire les chaînes GPP et US Privacy

Le SDK renvoie aussi les chaînes enregistrées :

String gppString = UniConsent.getInstance().getGPPString();
String gppSid = UniConsent.getInstance().getGPPSID();
String usPrivacy = UniConsent.getInstance().getUSPrivacyString();

Catégories de cookies

Disponible à partir de la version 26.10.0 du SDK. Lorsqu'une région utilise des catégories de cookies au lieu de l'IAB TCF ou des politiques américaines, la CMP affiche une bannière avec quatre catégories : Strictement nécessaires, Performance, Fonctionnalité, et Ciblage ou publicité. Cela s'applique à :

  • LGPD au Brésil, PIPL en Chine, POPIA en Afrique du Sud et PDPD au Vietnam, lorsqu'elles sont activées dans les paramètres du projet du tableau de bord UniConsent
  • vos règles pour les autres pays : une règle pour un pays, et une règle pour tous les autres pays
  • un projet Consent Categories, dans ses régions

Les catégories en opt-in démarrent avec seulement Strictement nécessaires activée, et shouldRequestConsent() renvoie true tant que l'utilisateur n'a pas fait de choix, puis à nouveau après un changement de version de configuration. Les catégories en opt-out démarrent avec toutes les catégories activées (Ciblage désactivé lorsque le suivi publicitaire est désactivé sur l'appareil aux États-Unis), et l'app ne sollicite pas l'utilisateur d'elle-même : il les modifie depuis votre lien vers les paramètres de confidentialité. L'opt-out s'applique à une règle opt-out pour les autres pays et, dans les apps, à un projet Consent Categories aux États-Unis.

Ouvrez les écrans des catégories avec Stage.CategoriesFirstScreen (bannière) et Stage.CategoriesSecondScreen (paramètres). setTestRegion() accepte aussi BR, CN, ZA, VN et d'autres codes pays, pour tester ces régions.

Finalités personnalisées et fournisseurs personnalisés

Disponible à partir de la version 26.10.0 du SDK. Les finalités personnalisées et les fournisseurs personnalisés que vous ajoutez dans les paramètres du projet du tableau de bord UniConsent s'affichent dans les écrans de la CMP : les finalités personnalisées dans le premier niveau et les paramètres IAB TCF et dans les paramètres des catégories de cookies, les fournisseurs personnalisés dans la liste des fournisseurs IAB TCF. Dans les paramètres CCPA et US State Privacy, seules les finalités personnalisées sensibles sont listées. Dans les paramètres des catégories de cookies, les fournisseurs personnalisés suivent la catégorie Ciblage ou publicité. Là où l'IAB TCF ne s'applique pas (catégories de cookies et États-Unis), les fournisseurs personnalisés sont listés en lecture seule dans la liste des fournisseurs du menu, et dans les paramètres des catégories de cookies sous Ciblage ou publicité.

Pour démarrer ou arrêter vos propres SDK selon eux, demandez au SDK si l'app peut utiliser maintenant une finalité personnalisée ou un fournisseur personnalisé. La réponse suit la politique de l'utilisateur, selon les mêmes règles que la CMP utilise pour les balises :

  • IAB TCF, IAB TCF Canada et catégories de cookies en opt-in : autorisés seulement après l'accord de l'utilisateur
  • les États-Unis et les catégories de cookies en opt-out : autorisés jusqu'à ce que l'utilisateur s'y oppose ; les finalités personnalisées sensibles demandent l'accord de l'utilisateur, et les fournisseurs personnalisés sont désactivés lorsque le suivi publicitaire est désactivé sur l'appareil aux États-Unis
  • aucune politique : autorisés
UniConsent cmp = UniConsent.getInstance();
if (cmp.isCustomPurposeConsented(1)) {
    // démarrez le SDK couvert par votre finalité personnalisée 1
}
boolean vendorAllowed = cmp.isCustomVendorConsented(2);
Map<String, Map<String, Boolean>> all = cmp.getCustomConsents(); // {"purposes": {"1": true}, "vendors": {"2": false}}

Appelez-les de nouveau après la fermeture de la CMP ou un changement du consentement. Les identifiants que le projet n'a pas, et tous les identifiants avant que le SDK soit prêt, renvoient false.

Divulgation des SDK tiers

La CMP peut lister les SDK tiers de votre app (régies publicitaires, analytique, attribution et autres) avec leur société, leur utilisation et leur politique de confidentialité. Les utilisateurs les voient dans la liste des fournisseurs, en lecture seule dans toutes les régions : il n'y a pas d'interrupteurs, et votre app continue d'activer ou de désactiver chaque SDK selon les choix de l'utilisateur pour les finalités ou les catégories de cookies.

Pour définir la liste, activez Enable Third-party SDKs dans Step 4: Advanced Features de votre projet d'app, choisissez vos SDK dans l'onglet Third-party SDKs ou ajoutez les vôtres, puis enregistrez et publiez. Aucun code n'est nécessaire dans votre app.

Configurer le statut de consentement par défaut :

<meta-data android:name="firebase_analytics_collection_enabled" android:value="false" />

<meta-data android:name="google_analytics_default_allow_analytics_storage" android:value="false" />
<meta-data android:name="google_analytics_default_allow_ad_storage" android:value="false" />
<meta-data android:name="google_analytics_default_allow_ad_user_data" android:value="false" />
<meta-data android:name="google_analytics_default_allow_ad_personalization_signals" android:value="false" />

Contrôler les analytics en fonction des indicateurs de consentement :


// <= 25.6.1
@Override
public void handle(Event event) {
    Log.d("CMP_EVENT", event.toString())
    if(UniConsent.getInstance().hasIABPurposeConsent(1)) {
        // Set consent types.
        Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentMap = new EnumMap<>(FirebaseAnalytics.ConsentType.class);
        consentMap.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, FirebaseAnalytics.ConsentStatus.GRANTED);
        consentMap.put(FirebaseAnalytics.ConsentType.AD_STORAGE, FirebaseAnalytics.ConsentStatus.GRANTED);
        consentMap.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, FirebaseAnalytics.ConsentStatus.GRANTED);
        consentMap.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, FirebaseAnalytics.ConsentStatus.GRANTED);

        mFirebaseAnalytics.setConsent(consentMap);
        mFirebaseAnalytics.setAnalyticsCollectionEnabled(true);
    } else {
        // Set consent types.
        Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentMap = new EnumMap<>(FirebaseAnalytics.ConsentType.class);
        consentMap.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, FirebaseAnalytics.ConsentStatus.DENIED);
        consentMap.put(FirebaseAnalytics.ConsentType.AD_STORAGE, FirebaseAnalytics.ConsentStatus.DENIED);
        consentMap.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, FirebaseAnalytics.ConsentStatus.DENIED);
        consentMap.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, FirebaseAnalytics.ConsentStatus.DENIED);

        mFirebaseAnalytics.setConsent(consentMap);
        mFirebaseAnalytics.setAnalyticsCollectionEnabled(false);
    }

    // other logics such as send analytics events
}

// > 25.6.1
@Override
public void handle(Event event) {
    Log.d("CMP_EVENT", event.toString())

    // other logics such as send analytics events

    // Example: send Firebase event or other analytics metrics
    Bundle bundle = new Bundle();
    bundle.putString(FirebaseAnalytics.Param.ITEM_ID, "id");
    bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, "name");
    bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");
    mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
}

Pour plus d'informations, consultez Configurer le mode de consentement pour les applications

Modes d'affichage

Le SDK prend en charge trois modes d'affichage pour l'interface de consentement, correspondant à l'API du SDK Flutter :

ModeEnumDescription
Plein écranCMPDisplayMode.FULL_SCREENOuvre la CMP dans une nouvelle activité plein écran (par défaut)
Bottom SheetCMPDisplayMode.BOTTOM_SHEETGlisse depuis le bas sous forme de feuille modale (90 % de hauteur)
DialogueCMPDisplayMode.DIALOGS'affiche sous forme de dialogue centré (90 % de largeur, 70 % de hauteur)

Remarque : Les modes bottom sheet et dialogue nécessitent que votre Activity étende AppCompatActivity ou FragmentActivity.

Remarques

  1. Les utilisateurs doivent avoir la possibilité d'accéder à un bouton ou un lien « Paramètres de confidentialité » dans la section des paramètres de votre application afin d'ouvrir l'interface de la CMP.
  2. Vous pouvez utiliser la fonction shouldRequestConsent() pour vérifier si vous devez demander un nouveau consentement en fonction du statut. Affichez l'interface de la CMP si nécessaire lorsqu'un utilisateur ouvre l'application.
  3. À partir de la version 25.6.1 du SDK, vous n'avez plus besoin d'envoyer manuellement les options de consentement pour FirebaseAnalytics ou certains SDK AAP pris en charge — ils sont gérés automatiquement par le SDK. Pour plus d'informations, consultez Qu'est-ce que Google AAP et Google MMP pour les applications mobiles ?.

Journal des modifications

26.11.0

  • Ajout de setCustomConsent() pour enregistrer le choix d'une finalité personnalisée depuis un écran de votre app, comme une case de suivi d'ouverture des e-mails ; isCustomPurposeConsented() accepte aussi l'ID de la finalité personnalisée défini dans le tableau de bord
  • Un ID utilisateur email est envoyé sous forme de email_hash (SHA-256) ; l'adresse elle-même n'est ni stockée ni envoyée
  • Les clés IAB GPP suivent les réglages GPP Signals du tableau de bord

26.10.0

  • Clés IAB GPP et US Privacy pour les SDK publicitaires
  • US State Privacy et IAB TCF Canada dans les apps, y compris avec un premier niveau personnalisé
  • Ajout de getGPPString(), getGPPSID() et getUSPrivacyString()
  • Ouverture des paramètres US State Privacy avec Stage.USStateSecondScreen ; ajout de setLanguage(), dismissCMP(), isConsentGiven(), getConsentAge() et getGEOState()
  • Ouverture du premier niveau CCPA et US State Privacy avec Stage.CCPAFirstScreen et Stage.USStateFirstScreen ; ajout de setTestRegion() pour tester la CMP comme un utilisateur d'une autre région, par exemple le Canada
  • Catégories de cookies dans les apps : LGPD (Brésil), PIPL (Chine), POPIA (Afrique du Sud), PDPD (Vietnam), vos règles pour les autres pays et les projets Consent Categories, avec Stage.CategoriesFirstScreen et Stage.CategoriesSecondScreen
  • Ajout de getPolicy() ; agreeAll() et rejectAll() enregistrent aussi les catégories de cookies, les finalités personnalisées et les fournisseurs personnalisés
  • setTestRegion() accepte aussi BR, CN, ZA, VN et d'autres codes pays, et s'applique à getPolicy() et à shouldRequestConsent()
  • Ajout de isCustomPurposeConsented(), isCustomVendorConsented() et getCustomConsents() : les finalités et fournisseurs personnalisés que l'app peut utiliser maintenant selon la politique de l'utilisateur

26.9.0

  • Prise en charge de l’IAB TCF 2.4

Gardez une longueur d'avance sur la confidentialité et le consentement

Lois sur la confidentialité, consentement et conformité, quelques e-mails par mois.

Pas de spam, désabonnement à tout moment. Confidentialité