Leading Consent Management Platform

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

UniConsent CMP SDK für Android in mobile Apps integrieren

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".

Voraussetzungen

  • UniConsent CMP-Tarif mit Unterstützung für mobile Apps
  • Android API Level 21 oder höher
  • UniConsent CMP SDK-Paket (beim Support anfragen)

Erste Schritte

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'

Einwilligungs-UI anpassen

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.

Schritt 1: Markenstyling im Dashboard

Gehen Sie zu Projects → Projekt auswählen → Settings → Step 5: UI & Style Settings, um folgende Einstellungen vorzunehmen:

  • Main Button Colour — Stellen Sie die Farbe der primären Aktionstaste passend zu Ihrer Marke ein
  • Main Button Text Colour — Passen Sie die Textfarbe auf der primären Taste für bessere Lesbarkeit an
  • Background Colour — Stellen Sie die Hintergrundfarbe des Banners ein, damit es sich in Ihre App einfügt
  • Text Colour — Stellen Sie sicher, dass der Fließtext ausreichend Kontrast hat

Schritt 2: Erweitertes Styling mit benutzerdefiniertem CSS (Optional)

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.

Verwendung

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();

Benutzerdefinierte Größe (optional)

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:

ParameterGilt fürStandard, wenn nicht angegeben
heightRatioBOTTOM_SHEET, DIALOGSheet: 90 % des Bildschirms. Dialog: 70 %
widthRationur DIALOG90 % 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();

Benutzerdefinierter First Layer (Alle akzeptieren / Alle ablehnen)

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 geben false zurü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.

Einwilligung an WebView synchronisieren

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");

Beispiel mit 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);
    }
}

Beispiel mit 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)
    }
}

Berechtigung

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

Bestimmten Bildschirm öffnen und weitere Optionen

Ö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.

BildschirmZeigt
Stage.GDPRFirstScreenErste Ebene (Banner)
Stage.GDPRSecondScreenEinstellungen (Zwecke)
Stage.GDPRVendorsScreenAnbieter
Stage.CCPAFirstScreenErste Ebene CCPA
Stage.CCPASecondScreenCCPA-Einstellungen
Stage.USStateFirstScreenErste Ebene US State Privacy
Stage.USStateSecondScreenUS-State-Privacy-Einstellungen
Stage.CategoriesFirstScreenErste Ebene der Cookie-Kategorien (Banner)
Stage.CategoriesSecondScreenEinstellungen 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();

IAB GPP und US Privacy

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üsselWert
IABGPP_HDR_VersionGPP Version (1)
IABGPP_HDR_SectionsAbschnitts-IDs im GPP String, getrennt durch _
IABGPP_HDR_GppStringDer vollständige GPP String
IABGPP_GppSIDFür den Nutzer geltende Abschnitts-IDs, getrennt durch _, oder -1, wenn keiner gilt
IABGPP_2_StringIAB TCF EU String, wenn die DSGVO gilt
IABGPP_5_StringIAB TCF Kanada String, wenn Kanada TCF gilt
IABGPP_6_StringUS Privacy String, wenn der CCPA gilt
IABGPP_7_StringUS National (usnat) String, wenn US State Privacy oder der CCPA gilt
IABGPP_8_String bis IABGPP_27_StringDer 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_StringUS 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", "");

USA und Kanada

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.

Widerspruch gegen Werbe-Tracking auf dem Gerät

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.

GPP und US Privacy Strings auslesen

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:

  • LGPD in Brasilien, PIPL in China, POPIA in Südafrika und PDPD in Vietnam, wenn in den Projekteinstellungen des UniConsent Dashboards aktiviert
  • Ihre Regeln für andere Länder: eine Regel für ein Land und eine Regel für alle übrigen Länder
  • ein Consent Categories Projekt, in seinen Regionen

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.

Benutzerdefinierte Zwecke und benutzerdefinierte Anbieter

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:

  • IAB TCF, IAB TCF Kanada und Opt-in Cookie-Kategorien: erst erlaubt, nachdem der Nutzer zustimmt
  • die USA und Opt-out Cookie-Kategorien: erlaubt, bis der Nutzer widerspricht; sensible benutzerdefinierte Zwecke brauchen die Zustimmung des Nutzers, und die benutzerdefinierten Anbieter sind aus, wenn auf dem Gerät in den USA das Werbe-Tracking deaktiviert ist
  • keine Richtlinie: erlaubt
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.

Offenlegung von SDKs von Drittanbietern

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

Anzeigemodi

Das SDK unterstützt drei Anzeigemodi für die Einwilligungs-UI, entsprechend der Flutter SDK API:

ModusEnumBeschreibung
VollbildCMPDisplayMode.FULL_SCREENÖffnet die CMP in einer neuen Vollbild-Activity (Standard)
Bottom SheetCMPDisplayMode.BOTTOM_SHEETGleitet als modales Sheet von unten herein (90% Höhe)
DialogCMPDisplayMode.DIALOGWird als zentrierter Dialog angezeigt (90% Breite, 70% Höhe)

Hinweis: Die Modi Bottom Sheet und Dialog erfordern, dass Ihre Activity von AppCompatActivity oder FragmentActivity erbt.

Hinweise

  1. Nutzer sollten die Möglichkeit haben, über einen Button oder Link "Datenschutzeinstellungen" im Einstellungsbereich Ihrer App die CMP-UI zu öffnen.
  2. Sie können die Funktion shouldRequestConsent() verwenden, um zu prüfen, ob eine neue Einwilligung basierend auf dem Status angefordert werden sollte. Zeigen Sie die CMP-UI bei Bedarf an, wenn ein Nutzer die Anwendung öffnet.
  3. Ab SDK-Version 25.6.1 müssen Sie die Einwilligungsoptionen für FirebaseAnalytics oder bestimmte unterstützte AAP SDKs nicht mehr manuell senden — dies wird automatisch vom SDK übernommen. Weitere Informationen finden Sie unter Was ist Google AAP und Google MMP für mobile Apps?.

Änderungsprotokoll

26.11.0

  • Neu: 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 Zwecks
  • Eine email Nutzer-ID wird als email_hash (SHA-256) gesendet; die Adresse selbst wird weder gespeichert noch gesendet
  • Die IAB GPP Schlüssel folgen den GPP Signals Einstellungen im Dashboard

26.10.0

  • IAB GPP und US Privacy Schlüssel für Werbe-SDKs
  • US State Privacy und IAB TCF Kanada in Apps, auch mit benutzerdefiniertem First Layer
  • Neu: getGPPString(), getGPPSID() und getUSPrivacyString()
  • Einstellungen für US State Privacy mit Stage.USStateSecondScreen öffnen; neu: setLanguage(), dismissCMP(), isConsentGiven(), getConsentAge() und getGEOState()
  • Erste Ebene von CCPA und US State Privacy mit Stage.CCPAFirstScreen und Stage.USStateFirstScreen öffnen; neu: setTestRegion(), um die CMP wie für einen Nutzer in einer anderen Region zu testen, etwa Kanada
  • Cookie-Kategorien in Apps: LGPD (Brasilien), PIPL (China), POPIA (Südafrika), PDPD (Vietnam), Ihre Regeln für andere Länder und Consent Categories Projekte, mit Stage.CategoriesFirstScreen und Stage.CategoriesSecondScreen
  • Neu: getPolicy(); agreeAll() und rejectAll() speichern außerdem die Cookie-Kategorien, benutzerdefinierten Zwecke und benutzerdefinierten Anbieter
  • setTestRegion() akzeptiert außerdem BR, CN, ZA, VN und andere Ländercodes und gilt auch für getPolicy() und shouldRequestConsent()
  • Neu: isCustomPurposeConsented(), isCustomVendorConsented() und getCustomConsents(): die benutzerdefinierten Zwecke und Anbieter, die die App nach der Richtlinie des Nutzers jetzt verwenden darf

26.9.0

  • Unterstützung für IAB TCF 2.4

Beim Datenschutz immer einen Schritt voraus

Datenschutzgesetze, Einwilligung und Compliance, ein paar E-Mails im Monat.

Kein Spam, jederzeit abbestellbar. Datenschutz