Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.
UniConsent CMP è un pacchetto per la gestione del consenso GDPR IAB TCF 2.4 nelle app Android. Nella directory "demo" trovi un'app dimostrativa integrata con UniConsent CMP.
Aggiungi UniConsentSDK-release.aar alla directory libs/ del tuo progetto e aggiorna il file 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'
Prima di integrare l'SDK, personalizza l'aspetto del banner del consenso nella Dashboard UniConsent per adattarlo al tuo brand e ottimizzare i tassi di consenso.
Vai a Projects → Select your Project → Settings → Step 5: UI & Style Settings per configurare:
Per un controllo più preciso, aggiungi CSS personalizzato nel campo CSS Content del passaggio 5. È consigliato per far sembrare il banner parte integrante della tua app e ottenere il miglior tasso di consenso:
/* 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;
}
Suggerimento: un'interfaccia del consenso coerente con il brand e integrata nella tua app ottiene in genere tassi di consenso più elevati. Gli utenti tendono a interagire in modo più positivo con un banner che rispecchia l'aspetto e lo stile che si aspettano.
Per usare UniConsent CMP nella tua app, segui questi passaggi:
Inizializza la CMP con un App ID fornito dal tuo 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
Mostra l'interfaccia della 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);
Puoi anche avviarla con una fase e una modalità di visualizzazione specifiche:
// 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();
Disponibile dalla versione 26.8.0 dell'SDK.
Entrambi i rapporti sono facoltativi: ogni modalità di visualizzazione funziona anche senza. Passa un rapporto (una frazione dello schermo, maggiore di 0 e al massimo 1) solo per sovrascrivere le dimensioni predefinite; i valori non validi generano IllegalArgumentException:
| Parametro | Si applica a | Valore predefinito se omesso |
|---|---|---|
heightRatio | BOTTOM_SHEET, DIALOG | Sheet: 90% dello schermo. Dialog: 70% |
widthRatio | Solo DIALOG | 90% della larghezza dello schermo, fino a 500dp |
I rapporti che non si applicano alla modalità di visualizzazione scelta vengono ignorati (FULL_SCREEN li ignora entrambi).
Verifica automaticamente se il consenso è scaduto quando la vendorList viene aggiornata:
// 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);
Ottieni la tcString, se necessario:
// Get tcString
UniConsent.getInstance().getTCString();
Leggi lo stato del consenso:
// Read consent status
UniConsent.getInstance().hasIABPurposeConsent(1);
UniConsent.getInstance().hasIABVendorConsent(1);
Reimposta lo stato del consenso, se necessario:
// Reset consent status
UniConsent.getInstance().clearData();
Disponibile dalla versione 26.7.0 dell'SDK. Se crei una tua interfaccia di primo livello per il consenso invece di mostrare la webview della CMP, puoi salvare il consenso direttamente:
// 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();
Entrambe le API salvano gli stessi valori di consenso del flusso dell'interfaccia della CMP (chiavi IAB TCF, additional consent e segnali di Consent Mode) e inviano lo stesso evento di chiusura ai sottoscrittori.
Per gli utenti di Stati Uniti e Canada, entrambe le API salvano anche la scelta CCPA, US State Privacy e IAB TCF Canada che si applica a loro, con le stesse regole dell'interfaccia della CMP, e scrivono le chiavi IAB GPP e US Privacy. Attiva le modalità API-Only nelle impostazioni del progetto nella dashboard di UniConsent, così il banner della CMP non viene mostrato in quelle regioni.
Salvano anche la scelta delle categorie di cookie dove si applica un banner di categorie di cookie (tutte le categorie, oppure solo Strettamente necessari), e le finalità e i fornitori personalizzati del progetto.
Per sapere quale primo livello mostrare, chiama getPolicy() (dalla versione 26.10.0 dell'SDK). Restituisce la policy che si applica all'utente, con le stesse regole della CMP: gdpr (IAB TCF), tcfca (IAB TCF Canada), uss (US State Privacy), ccpa, categories (vedi Categorie di cookie più avanti) o none.
UniConsent cmp = UniConsent.getInstance();
if (cmp.shouldRequestConsent()) {
// l'utente deve fare una scelta: mostra il tuo primo livello per questa policy
String policy = cmp.getPolicy(); // gdpr, tcfca o categories
}
Nota: chiama queste API solo dopo il completamento di
init()(ad esempio dopo l'evento READY). Richiedono la vendor list e la configurazione del progetto, che vengono recuperate durante l'inizializzazione, e restituisconofalsese non è stato possibile salvare il consenso.Importante: il tuo primo livello personalizzato deve comunque rispettare i requisiti IAB TCF (indicare le finalità e i fornitori e offrire le opzioni di accettazione e rifiuto con uguale evidenza). Gli utenti devono comunque poter aprire l'interfaccia completa della CMP (
launchCMP()) per effettuare scelte granulari.
Se la tua app apre una WebView che carica una pagina web con il tag CMP di UniConsent, puoi passare lo stato del consenso nativo in modo che il tag CMP riconosca il consenso esistente e non mostri di nuovo il banner.
Inietta il consenso all'avvio della pagina, prima che venga eseguito il 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");
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" />
Apri la CMP su una schermata specifica, ad esempio da un link "Impostazioni privacy" della tua app. La schermata richiesta si apre sempre. Per gli utenti negli Stati Uniti, le schermate delle impostazioni aprono le impostazioni CCPA o US State Privacy che si applicano a loro. Gli utenti in Canada vedono la versione IAB TCF Canada delle schermate IAB TCF.
| Schermata | Mostra |
|---|---|
Stage.GDPRFirstScreen | Primo livello (banner) |
Stage.GDPRSecondScreen | Impostazioni (finalità) |
Stage.GDPRVendorsScreen | Fornitori |
Stage.CCPAFirstScreen | Primo livello CCPA |
Stage.CCPASecondScreen | Impostazioni CCPA |
Stage.USStateFirstScreen | Primo livello US State Privacy |
Stage.USStateSecondScreen | Impostazioni US State Privacy |
Stage.CategoriesFirstScreen | Primo livello delle categorie di cookie (banner) |
Stage.CategoriesSecondScreen | Impostazioni delle categorie di cookie |
UniConsent cmp = UniConsent.getInstance();
// aprire la schermata delle impostazioni
cmp.launchCMP(Stage.GDPRSecondScreen);
// mostrare la CMP in francese invece che nella lingua del dispositivo (codice di due lettere)
cmp.setLanguage("FR");
// log di debug dell'SDK e della pagina CMP; usa LogLevel.ERROR (predefinito) nelle build di produzione
cmp.setLogLevel(LogLevel.DEBUG);
// solo per i test: mostrare la CMP come per un utente di un'altra regione, "EU", "CA" (Canada), "CAQC" (Québec), "US" più un codice di stato come "USCA" o "USTX", "BR", "CN", "ZA", "VN" o qualsiasi altro codice paese, oppure "N" (fuori da queste regioni). Si applica anche a getPolicy() e a shouldRequestConsent(); da rimuovere nelle build di produzione
cmp.setTestRegion("CA");
// chiudere la CMP se è aperta
cmp.dismissCMP();
// l'utente ha fatto una scelta: IAB TCF, CCPA, US State Privacy o IAB TCF Canada
boolean given = cmp.isConsentGiven();
// giorni dalla creazione del consenso IAB TCF, 0 se non c'è
int days = cmp.getConsentAge();
// regione dell'utente e, per Stati Uniti e Canada, il codice dello stato o della provincia (vuoto se sconosciuto)
String geo = cmp.getGEO();
String state = cmp.getGEOState();
La CMP salva le chiavi IAB GPP e la chiave US Privacy in le SharedPreferences predefinite dell'app, come definite dalle specifiche IAB. Gli SDK pubblicitari della tua app le leggono da lì; non servono modifiche al codice. Le chiavi GPP vengono scritte quando GPP, US State Privacy o IAB TCF Canada è attivato nelle impostazioni del progetto nella dashboard di UniConsent. La chiave US Privacy viene scritta ogni volta che il CCPA è attivato.
| Chiave | Valore |
|---|---|
IABGPP_HDR_Version | Versione GPP (1) |
IABGPP_HDR_Sections | ID delle sezioni nella stringa GPP, separati da _ |
IABGPP_HDR_GppString | La stringa GPP completa |
IABGPP_GppSID | ID delle sezioni che si applicano all'utente, separati da _, oppure -1 se non se ne applica nessuna |
IABGPP_2_String | Stringa IAB TCF EU, quando si applica il GDPR |
IABGPP_5_String | Stringa IAB TCF Canada, quando si applica il TCF Canada |
IABGPP_6_String | Stringa US Privacy, quando si applica il CCPA |
IABGPP_7_String | Stringa US National (usnat), quando si applica US State Privacy o il CCPA |
IABGPP_8_String a IABGPP_27_String | La sezione dello stato dell'utente (8 California a 27 Rhode Island), quando si applica US State Privacy, o la California con il CCPA, secondo l'impostazione GPP Sections |
IABUSPrivacy_String | Stringa US Privacy ogni volta che il CCPA è attivato: la scelta dell'utente nella regione CCPA, altrimenti 1--- |
Le chiavi vengono aggiornate a ogni caricamento della CMP e dopo ogni scelta di consenso. Quali utenti ricevono le chiavi IABGPP_ dipende da GPP Signals nelle impostazioni del progetto: gli utenti in Canada sempre (IAB TCF Canada), quelli negli Stati Uniti quando US è attivo e quelli nell'UE quando EU è attivo. Gli utenti non coperti da alcuna regione ricevono le chiavi senza sezioni finché US o EU è attivo, altrimenti nessuna chiave. Per leggerle direttamente:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String gppString = prefs.getString("IABGPP_HDR_GppString", "");
String gppSid = prefs.getString("IABGPP_GppSID", "");
Le app supportano le stesse opzioni per Stati Uniti e Canada dei siti web: CCPA, US State Privacy (con l'elenco degli stati e le impostazioni GPP Sections e MSPA) e IAB TCF Canada. shouldRequestConsent() restituisce true per gli utenti del Canada a cui si applica IAB TCF Canada finché non fanno una scelta. La privacy negli Stati Uniti è di tipo opt-out, quindi agli utenti statunitensi non viene chiesto da sé: vedono il banner o le impostazioni USA quando la tua app apre la CMP, ad esempio da un link alle impostazioni privacy. Fino ad allora, quando il CCPA o US State Privacy è attivato, l'SDK scrive le chiavi US Privacy e GPP predefinite per gli utenti statunitensi senza mostrare nulla: nessuna opposizione, oppure opposizione quando il tracciamento pubblicitario è disattivato sul dispositivo. US State Privacy parte disattivato nei nuovi progetti Mobile App; attivalo nella dashboard.
Quando l'utente ha disattivato il tracciamento pubblicitario sul dispositivo, la CMP lo considera un'opposizione statunitense alla vendita, alla condivisione e alla pubblicità mirata, come fa Global Privacy Control sui siti web. Su iOS è il tracciamento non consentito in App Tracking Transparency; su Android un ID pubblicità eliminato o la limitazione del tracciamento pubblicitario, letti tramite i servizi Google Play quando la tua app li include. Una scelta che l'utente salva poi nel banner ha la precedenza.
L'SDK restituisce anche le stringhe salvate:
String gppString = UniConsent.getInstance().getGPPString();
String gppSid = UniConsent.getInstance().getGPPSID();
String usPrivacy = UniConsent.getInstance().getUSPrivacyString();
Disponibile dalla versione 26.10.0 dell'SDK. Dove una regione usa le categorie di cookie invece di IAB TCF o delle policy USA, la CMP mostra un banner con quattro categorie: Strettamente necessari, Prestazioni, Funzionalità, e Targeting o pubblicità. Si applica a:
Le categorie opt-in partono con solo Strettamente necessari attiva, e shouldRequestConsent() restituisce true finché l'utente non fa una scelta, e di nuovo dopo che modifichi la versione della configurazione. Le categorie opt-out partono con tutte le categorie attive (Targeting disattivato quando il tracciamento pubblicitario è disattivato sul dispositivo negli Stati Uniti), e l'app non chiede da sé: gli utenti le modificano dal tuo link alle impostazioni privacy. L'opt-out si applica a una regola opt-out per gli altri paesi e, nelle app, a un progetto Consent Categories negli Stati Uniti.
Apri le schermate delle categorie con Stage.CategoriesFirstScreen (banner) e Stage.CategoriesSecondScreen (impostazioni). setTestRegion() accetta anche BR, CN, ZA, VN e altri codici paese, per provare queste regioni.
Disponibile dalla versione 26.10.0 dell'SDK. Le finalità personalizzate e i fornitori personalizzati che aggiungi nelle impostazioni del progetto nella dashboard di UniConsent compaiono nelle schermate della CMP: le finalità personalizzate nel primo livello e nelle impostazioni IAB TCF e nelle impostazioni delle categorie di cookie, i fornitori personalizzati nell'elenco dei fornitori IAB TCF. Nelle impostazioni CCPA e US State Privacy sono elencate solo le finalità personalizzate sensibili. Nelle impostazioni delle categorie di cookie i fornitori personalizzati seguono la categoria Targeting o pubblicità. Dove IAB TCF non si applica (categorie di cookie e Stati Uniti), i fornitori personalizzati sono elencati in sola lettura nell'elenco dei fornitori del menu, e nelle impostazioni delle categorie di cookie sotto Targeting o pubblicità.
Per avviare o fermare i tuoi SDK in base a essi, chiedi all'SDK se l'app può usare ora una finalità personalizzata o un fornitore personalizzato. La risposta segue la policy dell'utente, con le stesse regole che la CMP usa per i tag:
UniConsent cmp = UniConsent.getInstance();
if (cmp.isCustomPurposeConsented(1)) {
// avvia l'SDK coperto dalla tua finalità personalizzata 1
}
boolean vendorAllowed = cmp.isCustomVendorConsented(2);
Map<String, Map<String, Boolean>> all = cmp.getCustomConsents(); // {"purposes": {"1": true}, "vendors": {"2": false}}
Richiamale dopo la chiusura della CMP o una modifica del consenso. Gli ID che il progetto non ha, e tutti gli ID prima che l'SDK sia pronto, restituiscono false.
La CMP può elencare gli SDK di terze parti della tua app (reti pubblicitarie, analisi, attribuzione e altri) con la loro azienda, il loro utilizzo e la loro informativa sulla privacy. Gli utenti li vedono nell'elenco dei fornitori, in sola lettura in tutte le regioni: non ci sono interruttori e la tua app continua ad attivare o disattivare ogni SDK in base alle scelte dell'utente per le finalità o le categorie di cookie.
Per impostare l'elenco, attiva Enable Third-party SDKs in Step 4: Advanced Features del tuo progetto app, scegli i tuoi SDK nella scheda Third-party SDKs o aggiungine di tuoi, poi salva e pubblica. Non serve codice nella tua app.
Configura i valori chiave (KV) predefiniti dello stato del consenso:
<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" />
Controlla gli analytics in base ai flag del consenso:
// <= 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 logic such as send analytics events
}
// > 25.6.1
@Override
public void handle(Event event) {
Log.d("CMP_EVENT", event.toString())
// other logic 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);
}
Trova maggiori informazioni in Set up consent mode for apps
L'SDK supporta tre modalità di visualizzazione per l'interfaccia del consenso, in linea con l'API dell'SDK Flutter:
| Modalità | Enum | Descrizione |
|---|---|---|
| Schermo intero | CMPDisplayMode.FULL_SCREEN | Apre la CMP in una nuova activity a schermo intero (predefinita) |
| Bottom sheet | CMPDisplayMode.BOTTOM_SHEET | Scorre dal basso come foglio modale (90% dell'altezza) |
| Dialog | CMPDisplayMode.DIALOG | Viene mostrata come finestra di dialogo centrata (90% della larghezza, 70% dell'altezza) |
Nota: le modalità bottom sheet e dialog richiedono che la tua Activity estenda
AppCompatActivityoFragmentActivity.
setCustomConsent() per salvare la scelta su una finalità personalizzata da una schermata della tua app, come una casella per il tracciamento dell'apertura delle email; isCustomPurposeConsented() accetta anche l'ID della finalità personalizzata impostato nella dashboardemail viene inviato come email_hash (SHA-256); l'indirizzo non viene salvato né inviatogetGPPString(), getGPPSID() e getUSPrivacyString()Stage.USStateSecondScreen; nuovi setLanguage(), dismissCMP(), isConsentGiven(), getConsentAge() e getGEOState()Stage.CCPAFirstScreen e Stage.USStateFirstScreen; nuovo setTestRegion() per provare la CMP come un utente di un'altra regione, ad esempio il CanadaStage.CategoriesFirstScreen e Stage.CategoriesSecondScreengetPolicy(); agreeAll() e rejectAll() salvano anche le categorie di cookie, le finalità personalizzate e i fornitori personalizzatisetTestRegion() accetta anche BR, CN, ZA, VN e altri codici paese, e si applica a getPolicy() e a shouldRequestConsent()isCustomPurposeConsented(), isCustomVendorConsented() e getCustomConsents(): le finalità e i fornitori personalizzati che l'app può usare ora secondo la policy dell'utenteLeggi sulla privacy, consenso e conformità, poche email al mese.