Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.
UniConsent CMP est un package pour la gestion du consentement RGPD IAB TCF 2.3 dans les applications Flutter. Vous pouvez trouver une application de démonstration intégrée avec UniConsent CMP dans le répertoire "uniconsent_demo".
Pour inclure le package UniConsent dans votre projet Flutter, ajoutez-le en tant que dépendance dans votre fichier pubspec.yaml :
dependencies:
uniconsent:
path: ../uniconsent
Ensuite, synchronisez la dépendance en exécutant la commande suivante :
flutter pub get
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.
Accédez à Projects → Sélectionnez votre projet → Settings → Step 5: UI & Style Settings pour configurer :
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.
Pour utiliser la CMP UniConsent dans votre application, suivez ces étapes :
Initialisez la CMP avec un App ID fourni par votre gestionnaire de compte :
// Init CMP with appId
UniConsent.instance.setAppId("YOUR_APP_ID_CHANGE_THIS");
// Set language (Optional)
UniConsent.instance.setLanguage("EN");
Affichez l'interface de la CMP :
// Display CMP as full-screen page (default)
UniConsent.instance.launchCMP(context);
// Display CMP as a modal bottom sheet
UniConsent.instance.launchCMP(context, displayMode: CMPDisplayMode.modalSheet);
// Display CMP as a center dialog
UniConsent.instance.launchCMP(context, displayMode: CMPDisplayMode.dialog);
Écoutez les événements du cycle de vie du SDK avec subscribe(). C'est la méthode recommandée pour savoir quand l'interface est affichée et quand elle est fermée.
Événements disponibles (CMPEventType) :
CMPEventType.uiDisplay — L'interface de consentement est affichéeCMPEventType.uiClose — L'interface de consentement est ferméeUniConsent.instance.subscribe((event) {
switch (event.type) {
case CMPEventType.uiDisplay:
print('CMP UI displayed');
break;
case CMPEventType.uiClose:
print('CMP UI closed');
break;
default:
break;
}
});
Écoutez les changements de consentement avec un callback optionnel :
// Display CMP UI with consent change callback
UniConsent.instance.launchCMP(context, onConsentChanged: (info) {
// Called when the user saves consent choices
print('Consent updated: ${info?.tcString}');
});
Pour un contrôle total, utilisez buildCMPWidget() pour intégrer la CMP dans votre propre mise en page :
// Embed in your own widget tree
UniConsent.instance.buildCMPWidget(
onConsentChanged: (info) { /* ... */ },
onClose: () { /* dismiss your custom UI */ },
);
Vérifier automatiquement si le consentement est nécessaire au lancement de l'application :
// Check if consent should be requested (e.g. first visit, or vendor list updated)
final shouldRequest = await UniConsent.instance.shouldRequestConsent();
if (shouldRequest) {
UniConsent.instance.launchCMP(context);
}
Obtenir le tcString si nécessaire :
// Get tcString
final info = await UniConsent.instance.getConsentInfo();
print(info?.tcString);
Lire le statut du consentement :
// Read consent status
final info = await UniConsent.instance.getConsentInfo();
if (info is ConsentInfo &&
info.purposeConsents.contains(DataUsagePurpose.useLimitedDataToSelectAds)) {
// do something
}
Réinitialiser le statut du consentement si nécessaire :
// Clear all consent data
await UniConsent.instance.clearAll();
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.
import 'package:webview_flutter/webview_flutter.dart';
import 'package:uniconsent/uniconsent.dart';
final controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(NavigationDelegate(
onPageStarted: (url) async {
// Inject consent at page start, before CMP tag runs
await UniConsent.instance.syncConsent(controller);
},
))
..loadRequest(Uri.parse('https://example.com'));
Les types suivants sont disponibles lors de l'import de package:uniconsent/uniconsent.dart :
UniConsent — singleton principal du SDKUniConsentInfo — données de consentement de base (sdkId, tcString, gdprApplies, vendorListVersion, etc.)ConsentInfo — étend UniConsentInfo avec les listes de consentement par finalitéDataUsagePurpose — enum des identifiants de finalité IAB TCF 2.3KVDBKeys — constantes de clés de stockage IAB TCF (par ex. KVDBKeys.tcString, KVDBKeys.purposeConsents)CMPDisplayMode — enum pour le style d'affichage (page, modalSheet, dialog)CMPEventType — enum pour les événements du cycle de vie (sdkInit, ready, uiDisplay, uiClose)CMPEvent — objet événement avec une propriété typeCMPEventCallback — typedef pour le callback de subscribe()LogLevel — debug / prodConsentCallback — typedef pour le callback onConsentChangedUniConsentCMPContent — le widget CMP principal pour les mises en page personnalisées