Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.
UniConsent CMP ist ein Paket zur Verwaltung der GDPR IAB TCF 2.3 Einwilligung in Flutter-Apps. Eine Demo-App mit integrierter UniConsent CMP finden Sie im Verzeichnis "uniconsent_demo".
Um das UniConsent-Paket in Ihr Flutter-Projekt einzubinden, fügen Sie es als Abhängigkeit in Ihrer pubspec.yaml-Datei hinzu:
dependencies:
uniconsent:
path: ../uniconsent
Synchronisieren Sie dann die Abhängigkeit mit folgendem Befehl:
flutter pub get
Bevor Sie das SDK integrieren, passen Sie das Erscheinungsbild des Einwilligungsbanners im UniConsent Dashboard an, um es an Ihre Marke anzupassen und die Einwilligungsrate zu optimieren.
Gehen Sie zu Projects → Projekt auswählen → Settings → Step 5: UI & Style Settings, um folgende Einstellungen vorzunehmen:
Für eine präzisere Steuerung fügen Sie benutzerdefiniertes CSS im Feld CSS Content unter Schritt 5 hinzu. Dies wird empfohlen, damit sich das Banner nativ in Ihre App einfügt und die beste Einwilligungsrate erzielt wird:
/* 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;
}
Tipp: Eine gut gebrandete Einwilligungs-UI, die sich nativ in Ihre App einfügt, erzielt typischerweise höhere Einwilligungsraten. Nutzer interagieren eher positiv mit einem Banner, das dem erwarteten Erscheinungsbild entspricht.
Um UniConsent CMP in Ihrer App zu nutzen, folgen Sie diesen Schritten:
Initialisieren Sie die CMP mit einer App-ID von Ihrem Account Manager:
// Init CMP with appId
UniConsent.instance.setAppId("YOUR_APP_ID_CHANGE_THIS");
// Set language (Optional)
UniConsent.instance.setLanguage("EN");
CMP-UI anzeigen:
// 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);
Verwenden Sie subscribe(), um auf SDK-Lebenszyklusereignisse zu lauschen. Dies ist die empfohlene Methode, um zu wissen, wann die UI angezeigt und wann sie geschlossen wird.
Verfügbare Ereignisse (CMPEventType):
CMPEventType.uiDisplay — Einwilligungs-UI wird angezeigtCMPEventType.uiClose — Einwilligungs-UI wird geschlossenUniConsent.instance.subscribe((event) {
switch (event.type) {
case CMPEventType.uiDisplay:
print('CMP UI displayed');
break;
case CMPEventType.uiClose:
print('CMP UI closed');
break;
default:
break;
}
});
Auf Einwilligungsänderungen mit einem optionalen Callback lauschen:
// 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}');
});
Für volle Kontrolle verwenden Sie buildCMPWidget(), um die CMP in Ihr eigenes Layout einzubetten:
// Embed in your own widget tree
UniConsent.instance.buildCMPWidget(
onConsentChanged: (info) { /* ... */ },
onClose: () { /* dismiss your custom UI */ },
);
Automatisch prüfen, ob eine Einwilligung beim App-Start erforderlich ist:
// 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);
}
Den tcString abrufen, falls erforderlich:
// Get tcString
final info = await UniConsent.instance.getConsentInfo();
print(info?.tcString);
Den Einwilligungsstatus auslesen:
// Read consent status
final info = await UniConsent.instance.getConsentInfo();
if (info is ConsentInfo &&
info.purposeConsents.contains(DataUsagePurpose.useLimitedDataToSelectAds)) {
// do something
}
Einwilligungsstatus zurücksetzen, falls erforderlich:
// Clear all consent data
await UniConsent.instance.clearAll();
Wenn Ihre App eine WebView öffnet, die eine Webseite mit dem UniConsent CMP-Tag lädt, können Sie den nativen Einwilligungsstatus übergeben, damit das CMP-Tag die bestehende Einwilligung erkennt und das Banner nicht erneut anzeigt.
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'));
Die folgenden Typen sind beim Import von package:uniconsent/uniconsent.dart verfügbar:
UniConsent — Haupt-SDK-SingletonUniConsentInfo — Basis-Einwilligungsdaten (sdkId, tcString, gdprApplies, vendorListVersion, etc.)ConsentInfo — erweitert UniConsentInfo mit Einwilligungslisten auf ZweckebeneDataUsagePurpose — Enum der IAB TCF 2.3 Zweck-IDsKVDBKeys — IAB TCF Speicherschlüssel-Konstanten (z. B. KVDBKeys.tcString, KVDBKeys.purposeConsents)CMPDisplayMode — Enum für den Anzeigestil (page, modalSheet, dialog)CMPEventType — Enum für Lebenszyklusereignisse (sdkInit, ready, uiDisplay, uiClose)CMPEvent — Ereignisobjekt mit einer type-EigenschaftCMPEventCallback — Typedef für den subscribe()-CallbackLogLevel — debug / prodConsentCallback — Typedef für den onConsentChanged-CallbackUniConsentCMPContent — das Kern-CMP-Widget für benutzerdefinierte Layouts