Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.
UniConsent CMP ist ein Paket zur Verwaltung der GDPR IAB TCF 2.4 Einwilligung in Android-Apps. Eine Demo-App mit integrierter UniConsent CMP finden Sie im Verzeichnis "demo".
Fügen Sie UniConsentSDK-release.aar in das Verzeichnis libs/ Ihres Projekts ein und aktualisieren Sie Ihre 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'
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:
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
CMP-UI anzeigen:
// 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);
Sie können auch mit einer bestimmten Stufe und einem Anzeigemodus starten:
// 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();
Verfügbar ab SDK-Version 26.8.0.
Beide Ratios sind optional -- jeder Anzeigemodus funktioniert auch ohne sie. Übergeben Sie ein Ratio (ein Bruchteil des Bildschirms, größer als 0 und höchstens 1) nur, um die Standardgröße zu überschreiben; ungültige Werte werfen eine IllegalArgumentException:
| Parameter | Gilt für | Standard, wenn nicht angegeben |
|---|---|---|
heightRatio | BOTTOM_SHEET, DIALOG | Sheet: 90 % des Bildschirms. Dialog: 70 % |
widthRatio | nur DIALOG | 90 % der Bildschirmbreite, maximal 500dp |
Ratios, die für den gewählten Anzeigemodus nicht relevant sind, werden ignoriert (FULL_SCREEN ignoriert beide).
Automatisch prüfen, ob die Einwilligung abgelaufen ist, wenn die vendorList aktualisiert wird:
// 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);
Den tcString abrufen, falls erforderlich:
// Get tcString
UniConsent.getInstance().getTCString();
Den Einwilligungsstatus auslesen:
// Read consent status
UniConsent.getInstance().hasIABPurposeConsent(1);
UniConsent.getInstance().hasIABVendorConsent(1);
Einwilligungsstatus zurücksetzen, falls erforderlich:
// Reset consent status
UniConsent.getInstance().clearData();
Verfügbar ab SDK-Version 26.7.0. Wenn Sie Ihre eigene First-Layer-Einwilligungsoberfläche erstellen, anstatt die CMP-Webview anzuzeigen, können Sie die Einwilligung direkt speichern:
// 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();
Beide APIs speichern dieselben Einwilligungswerte wie der CMP-UI-Flow (IAB-TCF-Schlüssel, Additional Consent und Consent-Mode-Signale) und lösen dasselbe Close-Event für Abonnenten aus.
Für Nutzer in den USA und Kanada speichern beide APIs zusätzlich die jeweils geltende Entscheidung für CCPA, US State Privacy und IAB TCF Kanada, nach denselben Regeln wie die CMP Oberfläche, und schreiben die IAB GPP und US Privacy Schlüssel. Aktivieren Sie die API-Only Modi in den Projekteinstellungen des UniConsent Dashboards, damit das CMP Banner für diese Regionen nicht angezeigt wird.
Außerdem speichern sie die Entscheidung zu den Cookie-Kategorien, wo ein Cookie-Kategorien-Banner gilt (alle Kategorien oder nur „Unbedingt erforderlich“), sowie die benutzerdefinierten Zwecke und benutzerdefinierten Anbieter des Projekts.
Um zu wissen, welchen First Layer Sie anzeigen sollen, rufen Sie getPolicy() auf (ab SDK Version 26.10.0). Es gibt die für den Nutzer geltende Richtlinie zurück, nach denselben Regeln wie die CMP: gdpr (IAB TCF), tcfca (IAB TCF Kanada), uss (US State Privacy), ccpa, categories (siehe Cookie-Kategorien unten) oder none.
UniConsent cmp = UniConsent.getInstance();
if (cmp.shouldRequestConsent()) {
// der Nutzer muss eine Entscheidung treffen: Ihren First Layer für diese Richtlinie anzeigen
String policy = cmp.getPolicy(); // gdpr, tcfca oder categories
}
Hinweis: Rufen Sie diese APIs erst nach Abschluss von
init()auf (z. B. nach dem READY-Event). Sie benötigen die Vendor-Liste und die Projektkonfiguration, die während der Initialisierung geladen werden, und gebenfalsezurück, wenn die Einwilligung nicht gespeichert werden konnte.Wichtig: Ihr benutzerdefinierter First Layer muss weiterhin die IAB-TCF-Anforderungen erfüllen (Zwecke und Anbieter offenlegen sowie Akzeptieren und Ablehnen gleichwertig anbieten). Nutzer sollten weiterhin die vollständige CMP-Oberfläche (
launchCMP()) öffnen können, um granulare Entscheidungen zu treffen.
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.
Injizieren Sie die Einwilligung beim Seitenstart, bevor das CMP-Tag ausgeführt wird:
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");
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);
}
}
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)
}
}
<uses-permission android:name="android.permission.INTERNET" />
Öffnen Sie die CMP auf einem bestimmten Bildschirm, zum Beispiel über einen Link „Datenschutzeinstellungen“ in Ihrer App. Der angeforderte Bildschirm wird immer geöffnet. Für Nutzer in den USA öffnen die Einstellungsbildschirme die für sie geltenden CCPA- oder US-State-Privacy-Einstellungen. Nutzer in Kanada sehen die IAB-TCF-Canada-Version der IAB-TCF-Bildschirme.
| Bildschirm | Zeigt |
|---|---|
Stage.GDPRFirstScreen | Erste Ebene (Banner) |
Stage.GDPRSecondScreen | Einstellungen (Zwecke) |
Stage.GDPRVendorsScreen | Anbieter |
Stage.CCPAFirstScreen | Erste Ebene CCPA |
Stage.CCPASecondScreen | CCPA-Einstellungen |
Stage.USStateFirstScreen | Erste Ebene US State Privacy |
Stage.USStateSecondScreen | US-State-Privacy-Einstellungen |
Stage.CategoriesFirstScreen | Erste Ebene der Cookie-Kategorien (Banner) |
Stage.CategoriesSecondScreen | Einstellungen der Cookie-Kategorien |
UniConsent cmp = UniConsent.getInstance();
// Einstellungsbildschirm öffnen
cmp.launchCMP(Stage.GDPRSecondScreen);
// CMP auf Französisch statt in der Gerätesprache anzeigen (zweistelliger Code)
cmp.setLanguage("FR");
// Debug-Logs von SDK und CMP-Seite, in Release-Builds LogLevel.ERROR (Standard) verwenden
cmp.setLogLevel(LogLevel.DEBUG);
// nur zum Testen: CMP wie für einen Nutzer in einer anderen Region anzeigen, "EU", "CA" (Kanada), "CAQC" (Quebec), "US" plus Bundesstaatscode wie "USCA" oder "USTX", "BR", "CN", "ZA", "VN" oder ein anderer Ländercode, oder "N" (außerhalb dieser Regionen). Gilt auch für getPolicy() und shouldRequestConsent(); in Release-Builds entfernen
cmp.setTestRegion("CA");
// CMP schließen, falls sie geöffnet ist
cmp.dismissCMP();
// der Nutzer hat eine Auswahl getroffen: IAB TCF, CCPA, US State Privacy oder IAB TCF Kanada
boolean given = cmp.isConsentGiven();
// Tage seit Erstellung der IAB-TCF-Einwilligung, 0 wenn keine vorliegt
int days = cmp.getConsentAge();
// Region des Nutzers und für die USA und Kanada der Code des Bundesstaats bzw. der Provinz (leer, wenn unbekannt)
String geo = cmp.getGEO();
String state = cmp.getGEOState();
Die CMP speichert die IAB GPP Schlüssel und den US Privacy Schlüssel in den Standard-SharedPreferences der App, wie in den IAB Spezifikationen definiert. Werbe-SDKs in Ihrer App lesen sie dort aus; Codeänderungen sind nicht nötig. Die GPP Schlüssel werden geschrieben, wenn GPP, US State Privacy oder IAB TCF Kanada in den Projekteinstellungen des UniConsent Dashboards aktiviert ist. Der US Privacy Schlüssel wird geschrieben, sobald CCPA aktiviert ist.
| Schlüssel | Wert |
|---|---|
IABGPP_HDR_Version | GPP Version (1) |
IABGPP_HDR_Sections | Abschnitts-IDs im GPP String, getrennt durch _ |
IABGPP_HDR_GppString | Der vollständige GPP String |
IABGPP_GppSID | Für den Nutzer geltende Abschnitts-IDs, getrennt durch _, oder -1, wenn keiner gilt |
IABGPP_2_String | IAB TCF EU String, wenn die DSGVO gilt |
IABGPP_5_String | IAB TCF Kanada String, wenn Kanada TCF gilt |
IABGPP_6_String | US Privacy String, wenn der CCPA gilt |
IABGPP_7_String | US National (usnat) String, wenn US State Privacy oder der CCPA gilt |
IABGPP_8_String bis IABGPP_27_String | Der Abschnitt für den Bundesstaat des Nutzers (8 Kalifornien bis 27 Rhode Island), wenn US State Privacy gilt, oder Kalifornien unter dem CCPA, gemäß der Einstellung GPP Sections |
IABUSPrivacy_String | US Privacy String, sobald CCPA aktiviert ist: die Entscheidung des Nutzers in der CCPA Region, sonst 1--- |
Die Schlüssel werden bei jedem Laden der CMP und nach jeder Einwilligungsentscheidung aktualisiert. Welche Nutzer die IABGPP_ Schlüssel erhalten, richtet sich nach GPP Signals in den Projekteinstellungen: Nutzer in Kanada immer (IAB TCF Canada), Nutzer in den USA, wenn US aktiviert ist, und Nutzer in der EU, wenn EU aktiviert ist. Nutzer, für die keine Region gilt, erhalten die Schlüssel ohne Abschnitt, solange US oder EU aktiviert ist, sonst keine Schlüssel. So lesen Sie sie selbst aus:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String gppString = prefs.getString("IABGPP_HDR_GppString", "");
String gppSid = prefs.getString("IABGPP_GppSID", "");
Apps unterstützen dieselben Optionen für die USA und Kanada wie Websites: CCPA, US State Privacy (mit Bundesstaatenliste, GPP Sections und MSPA Einstellungen) und IAB TCF Kanada. shouldRequestConsent() gibt für Nutzer in Kanada, für die IAB TCF Kanada gilt, true zurück, bis sie eine Entscheidung treffen. US Datenschutz ist ein Opt-out, daher werden Nutzer in den USA nicht von selbst gefragt: Sie sehen das US Banner oder die US Einstellungen, wenn Ihre App die CMP öffnet, zum Beispiel über einen Link zu den Datenschutzeinstellungen. Bis dahin schreibt das SDK, wenn CCPA oder US State Privacy aktiviert ist, für Nutzer in den USA die Standardwerte der US Privacy und GPP Schlüssel, ohne etwas anzuzeigen: kein Widerspruch, oder Widerspruch, wenn auf dem Gerät das Werbe-Tracking deaktiviert ist. US State Privacy ist bei neuen Mobile App Projekten zunächst aus; aktivieren Sie es im Dashboard.
Hat der Nutzer das Werbe-Tracking auf dem Gerät deaktiviert, behandelt die CMP dies als US Widerspruch gegen Verkauf, Weitergabe und zielgerichtete Werbung, so wie Global Privacy Control auf Websites. Unter iOS ist das nicht erlaubtes Tracking in App Tracking Transparency; unter Android eine gelöschte Werbe-ID oder eingeschränktes Werbe-Tracking, gelesen über die Google Play-Dienste, wenn Ihre App sie enthält. Eine Entscheidung, die der Nutzer danach im Banner speichert, hat Vorrang.
Das SDK gibt die gespeicherten Strings auch direkt zurück:
String gppString = UniConsent.getInstance().getGPPString();
String gppSid = UniConsent.getInstance().getGPPSID();
String usPrivacy = UniConsent.getInstance().getUSPrivacyString();
Verfügbar ab SDK Version 26.10.0. Wo eine Region Cookie-Kategorien statt IAB TCF oder der US Richtlinien verwendet, zeigt die CMP ein Banner mit vier Kategorien: Unbedingt erforderlich, Leistung, Funktionalität sowie Targeting oder Werbung. Das gilt für:
Bei Opt-in Kategorien ist zunächst nur „Unbedingt erforderlich“ aktiv, und shouldRequestConsent() gibt true zurück, bis der Nutzer eine Entscheidung trifft, und erneut, nachdem Sie die Konfigurationsversion geändert haben. Bei Opt-out Kategorien sind zunächst alle Kategorien aktiv (Targeting aus, wenn auf dem Gerät in den USA das Werbe-Tracking deaktiviert ist), und die App fragt nicht von selbst: Nutzer ändern sie über Ihren Link zu den Datenschutzeinstellungen. Opt-out gilt für eine Opt-out Regel für andere Länder und, in Apps, für ein Consent Categories Projekt in den USA.
Öffnen Sie die Kategorie-Bildschirme mit Stage.CategoriesFirstScreen (Banner) und Stage.CategoriesSecondScreen (Einstellungen). setTestRegion() akzeptiert außerdem BR, CN, ZA, VN und andere Ländercodes, um diese Regionen zu testen.
Verfügbar ab SDK Version 26.10.0. Die benutzerdefinierten Zwecke und benutzerdefinierten Anbieter, die Sie in den Projekteinstellungen des UniConsent Dashboards hinzufügen, erscheinen in den CMP Bildschirmen: die benutzerdefinierten Zwecke in der ersten Ebene und den Einstellungen von IAB TCF sowie in den Einstellungen der Cookie-Kategorien, die benutzerdefinierten Anbieter in der IAB TCF Anbieterliste. In den Einstellungen von CCPA und US State Privacy werden nur sensible benutzerdefinierte Zwecke aufgeführt. In den Einstellungen der Cookie-Kategorien folgen die benutzerdefinierten Anbieter der Kategorie Targeting oder Werbung. Wo IAB TCF nicht gilt (Cookie-Kategorien und die USA), werden die benutzerdefinierten Anbieter schreibgeschützt unter der Anbieterliste im Menü aufgeführt, und in den Einstellungen der Cookie-Kategorien unter Targeting oder Werbung.
Um Ihre eigenen SDKs danach zu starten oder zu stoppen, fragen Sie das SDK, ob die App einen benutzerdefinierten Zweck oder Anbieter jetzt verwenden darf. Die Antwort folgt der Richtlinie des Nutzers, nach denselben Regeln, die die CMP für Tags verwendet:
UniConsent cmp = UniConsent.getInstance();
if (cmp.isCustomPurposeConsented(1)) {
// das SDK starten, das Ihr benutzerdefinierter Zweck 1 abdeckt
}
boolean vendorAllowed = cmp.isCustomVendorConsented(2);
Map<String, Map<String, Boolean>> all = cmp.getCustomConsents(); // {"purposes": {"1": true}, "vendors": {"2": false}}
Rufen Sie sie erneut auf, nachdem die CMP geschlossen wurde oder sich die Einwilligung geändert hat. IDs, die das Projekt nicht hat, und alle IDs, bevor das SDK bereit ist, ergeben false.
Die CMP kann die SDKs von Drittanbietern in Ihrer App (Werbenetzwerke, Analyse, Attribution und andere) mit ihrem Unternehmen, ihrem Verwendungszweck und ihrer Datenschutzerklärung auflisten. Nutzer sehen sie unter der Anbieterliste, in allen Regionen schreibgeschützt: Es gibt keine Schalter, und Ihre App schaltet jedes SDK weiterhin anhand der Auswahl des Nutzers für Zwecke oder Cookie-Kategorien ein oder aus.
Um die Liste festzulegen, aktivieren Sie in Step 4: Advanced Features Ihres App-Projekts die Option Enable Third-party SDKs, wählen Sie im Tab Third-party SDKs Ihre SDKs aus oder fügen Sie eigene hinzu, und speichern und veröffentlichen Sie anschließend. In Ihrer App ist dafür kein Code nötig.
Standard-Einwilligungsstatus-KV einrichten:
<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" />
Analysen basierend auf den Einwilligungsflags steuern:
// <= 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);
}
Weitere Informationen finden Sie unter Set up consent mode for apps
Das SDK unterstützt drei Anzeigemodi für die Einwilligungs-UI, entsprechend der Flutter SDK API:
| Modus | Enum | Beschreibung |
|---|---|---|
| Vollbild | CMPDisplayMode.FULL_SCREEN | Öffnet die CMP in einer neuen Vollbild-Activity (Standard) |
| Bottom Sheet | CMPDisplayMode.BOTTOM_SHEET | Gleitet als modales Sheet von unten herein (90% Höhe) |
| Dialog | CMPDisplayMode.DIALOG | Wird als zentrierter Dialog angezeigt (90% Breite, 70% Höhe) |
Hinweis: Die Modi Bottom Sheet und Dialog erfordern, dass Ihre Activity von
AppCompatActivityoderFragmentActivityerbt.
setCustomConsent() speichert die Auswahl zu einem benutzerdefinierten Zweck aus einem eigenen Bildschirm Ihrer App, etwa einer Checkbox für das Tracking von E-Mail-Öffnungen; isCustomPurposeConsented() akzeptiert auch die im Dashboard festgelegte ID des Zwecksemail Nutzer-ID wird als email_hash (SHA-256) gesendet; die Adresse selbst wird weder gespeichert noch gesendetgetGPPString(), getGPPSID() und getUSPrivacyString()Stage.USStateSecondScreen öffnen; neu: setLanguage(), dismissCMP(), isConsentGiven(), getConsentAge() und getGEOState()Stage.CCPAFirstScreen und Stage.USStateFirstScreen öffnen; neu: setTestRegion(), um die CMP wie für einen Nutzer in einer anderen Region zu testen, etwa KanadaStage.CategoriesFirstScreen und Stage.CategoriesSecondScreengetPolicy(); agreeAll() und rejectAll() speichern außerdem die Cookie-Kategorien, benutzerdefinierten Zwecke und benutzerdefinierten AnbietersetTestRegion() akzeptiert außerdem BR, CN, ZA, VN und andere Ländercodes und gilt auch für getPolicy() und shouldRequestConsent()isCustomPurposeConsented(), isCustomVendorConsented() und getCustomConsents(): die benutzerdefinierten Zwecke und Anbieter, die die App nach der Richtlinie des Nutzers jetzt verwenden darfDatenschutzgesetze, Einwilligung und Compliance, ein paar E-Mails im Monat.