Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.
Questa guida spiega come integrare l'SDK della CMP di UniConsent nella tua applicazione React Native per gestire il consenso GDPR IAB TCF 2.4.
Nella directory demo, fornita insieme al pacchetto dell'SDK, trovi un'app demo con questo SDK integrato.
uniconsent-react-native-sdk-26.11.0.zip), scaricato dalla dashboard di UniConsent o ottenuto dal supporto.Scarica ed estrai il pacchetto dell'SDK (ad es. uniconsent-react-native-sdk-26.11.0.zip). Al suo interno troverai:
uniconsent-react-native-sdk-26.11.0.tgz: pacchetto SDK installabile con npmuniconsent-sdk/: file precompilati della libreria SDKdemo/: applicazione demoREADME.md: documentazioneInstalla il file .tgz con npm o Yarn:
# Replace <path-to-package-file.tgz> with the actual path to the file
npm install <path-to-package-file.tgz>
# or
yarn add <path-to-package-file.tgz>
Esempio: se inserisci il file .tgz nella radice del progetto:
npm install ./uniconsent-react-native-sdk-26.11.0.tgz
# or
yarn add file:./uniconsent-react-native-sdk-26.11.0.tgz
Questo SDK richiede le seguenti peer dependency:
npm install react-native-webview react-native-default-preference react-native-device-info
# or
yarn add react-native-webview react-native-default-preference react-native-device-info
Se sviluppi per iOS, vai alla directory ios del progetto e installa i pod:
cd ios
pod install
cd ..
Prima di integrare l'SDK, personalizza l'aspetto del banner di consenso nella dashboard di UniConsent in modo che corrisponda al tuo brand e ottimizzi 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 dello Step 5. È consigliato per rendere 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 ben personalizzata, che risulti nativa nella tua app, ottiene in genere tassi di consenso più elevati. Gli utenti sono più propensi a interagire positivamente con un banner che corrisponde all'aspetto che si aspettano.
Racchiudi il componente radice della tua applicazione (o la parte pertinente) con UniConsentProvider. Devi fornire il tuo licenseId (Publisher ID/pid di UniConsent).
// Your main App file (e.g., App.tsx or index.js)
import React from 'react';
import { UniConsentProvider } from 'uniconsent-sdk';
import YourAppRootComponent from './src/YourAppRootComponent';
const App = () => {
return (
<UniConsentProvider licenseId="YOUR_LICENSE_ID">
<YourAppRootComponent />
</UniConsentProvider>
);
};
export default App;
L'SDK supporta tre modalità di visualizzazione per l'interfaccia della CMP, configurabili tramite la prop displayMode di UniConsentProvider:
| Modalità | Descrizione |
|---|---|
'fullScreen' | Pagina a schermo intero (predefinita) |
'bottomSheet' | Pannello modale ancorato alla parte inferiore dello schermo |
'dialog' | Finestra di dialogo modale centrata |
// Full screen (default — no prop needed)
<UniConsentProvider licenseId="YOUR_LICENSE_ID">
// Bottom sheet
<UniConsentProvider licenseId="YOUR_LICENSE_ID" displayMode="bottomSheet">
// Bottom sheet at 70% of the screen height
<UniConsentProvider licenseId="YOUR_LICENSE_ID" displayMode="bottomSheet" heightRatio={0.7}>
// Center dialog
<UniConsentProvider licenseId="YOUR_LICENSE_ID" displayMode="dialog">
// Center dialog at 80% width and 60% height
<UniConsentProvider licenseId="YOUR_LICENSE_ID" displayMode="dialog" widthRatio={0.8} heightRatio={0.6}>
Disponibile a partire 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 la dimensione predefinita; i valori non validi generano un RangeError:
| Prop | Si applica a | Valore predefinito se omesso |
|---|---|---|
heightRatio | 'bottomSheet', 'dialog' | Sheet: 90% dello schermo. Dialog: 70% |
widthRatio | solo 'dialog' | 90% della larghezza dello schermo, fino a 500 |
I rapporti che non si applicano alla modalità di visualizzazione scelta vengono ignorati ('fullScreen' li ignora entrambi).
Ascolta gli eventi del ciclo di vita dell'SDK con la prop onEvent di UniConsentProvider.
Tipi di evento disponibili:
'sdkInit': inizializzazione dell'SDK avviata'ready': inizializzazione dell'SDK completata'uiDisplay': l'interfaccia del consenso viene mostrata'uiClose': l'interfaccia del consenso viene chiusa<UniConsentProvider
licenseId="YOUR_LICENSE_ID"
onEvent={(event) => {
switch (event.type) {
case 'ready':
console.log('SDK ready');
break;
case 'uiClose':
console.log('Consent UI closed');
break;
}
}}
>
<YourAppRootComponent />
</UniConsentProvider>
Usa l'hook useConsent in un componente all'interno del Provider per ottenere la funzione openCMP, quindi chiamala quando necessario (ad es. alla pressione di un pulsante).
import React from 'react';
import { View, Text, Button, ActivityIndicator } from 'react-native';
import { useConsent } from 'uniconsent-sdk';
const ConsentInfoComponent = () => {
const { consentStatus, isLoading, openCMP } = useConsent();
return (
<View>
<Text>Consent Status:</Text>
{isLoading ? (
<ActivityIndicator />
) : (
<Text>{consentStatus ?? 'Initializing...'}</Text>
)}
<Button
title="Manage Privacy Settings"
onPress={() => openCMP()}
disabled={isLoading}
/>
</View>
);
};
Usa le funzioni di utilità per verificare lo stato del consenso direttamente, senza l'hook:
import {
getTCString,
isEURegion,
isPurposeConsented,
isVendorConsented,
getConsentData,
} from 'uniconsent-sdk';
// Get the full TC String
const tcString = await getTCString();
// Check if user is in EU/EEA region
const inEU = await isEURegion();
// Check if a specific TCF purpose has consent (1-based ID)
const hasPurpose1 = await isPurposeConsented(1);
// Check if a specific vendor has consent (1-based ID)
const hasVendor755 = await isVendorConsented(755);
// Get all consent data as a single object
const consentData = await getConsentData();
Disponibile a partire dalla versione 26.7.0 dell'SDK. Se crei una tua interfaccia del consenso di primo livello invece di mostrare la webview della CMP, puoi salvare il consenso direttamente:
import { agreeAll, rejectAll } from 'uniconsent-sdk';
// Grant consent for all purposes, special features and vendors
const saved = await agreeAll();
// Reject all purposes, special features and vendors
const rejected = await rejectAll();
Entrambe le API salvano gli stessi valori di consenso del flusso dell'interfaccia della CMP (chiavi IAB TCF, consenso aggiuntivo e segnali di Consent Mode), aggiornano il consentStatus del provider e inviano l'evento uiClose a onEvent. Usano il licenseId registrato da UniConsentProvider, quindi chiamale dopo che il provider è stato montato.
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.
import { useEffect } from 'react';
import { useConsent, getPolicy } from 'uniconsent-sdk';
// dentro un componente funzione
const { consentStatus } = useConsent();
useEffect(() => {
if (consentStatus === 'pending') {
// l'utente deve fare una scelta: mostra il tuo primo livello per questa policy
getPolicy().then(policy => { /* gdpr, tcfca o categories */ });
}
}, [consentStatus]);
Importante: il tuo primo livello personalizzato deve comunque soddisfare i requisiti IAB TCF (indicare finalità e fornitori, e offrire accettazione e rifiuto con uguale evidenza). Gli utenti devono comunque poter aprire l'interfaccia completa della CMP (
openCMP()) per effettuare scelte granulari.
Se la tua app apre una WebView che carica una pagina web con il tag della CMP di UniConsent, puoi passare lo stato del consenso nativo in modo che il tag della CMP riconosca il consenso esistente e non mostri di nuovo il banner.
Usa getConsentSyncScript() con injectedJavaScriptBeforeContentLoaded per iniettare il consenso prima che venga eseguito qualsiasi script della pagina:
import React, { useState, useEffect } from 'react';
import { WebView } from 'react-native-webview';
import { getConsentSyncScript } from 'uniconsent-sdk';
const MyWebView = () => {
const [consentScript, setConsentScript] = useState<string | null>(null);
useEffect(() => {
getConsentSyncScript().then(setConsentScript);
}, []);
if (!consentScript) return null;
return (
<WebView
source={{ uri: 'https://example.com' }}
injectedJavaScriptBeforeContentLoaded={consentScript}
/>
);
};
L'SDK fornisce funzioni di supporto per lo sviluppo e il debug:
import { listKV, clearKV } from 'uniconsent-sdk';
// Log all stored consent keys to console
await listKV();
// Clear all stored consent data
await clearKV();
UniConsentProvider| Prop | Tipo | Obbligatoria | Predefinito | Descrizione |
|---|---|---|---|---|
licenseId | string | Sì | — | Il tuo Publisher ID (pid) di UniConsent. |
displayMode | CMPDisplayMode | No | 'fullScreen' | Stile di visualizzazione della CMP: 'fullScreen', 'bottomSheet' o 'dialog'. |
heightRatio | number | No | Sheet: 0.9, dialog: 0.7 | Altezza dell'interfaccia come frazione dell'altezza dello schermo in (0, 1]. Si applica a 'bottomSheet' e 'dialog'. |
widthRatio | number | No | 0.9 (massimo 500) | Larghezza della finestra di dialogo come frazione della larghezza dello schermo in (0, 1]. Si applica solo a 'dialog'. |
onEvent | CMPEventCallback | No | — | Callback per gli eventi del ciclo di vita dell'SDK (sdkInit, ready, uiDisplay, uiClose). |
langCode | string | No | Lingua del dispositivo | Lingua della CMP come codice di due lettere, ad esempio 'FR'. |
testRegion | string | No | Regione dell'utente | Solo per i test: mostra 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', oppure 'N' (fuori da queste regioni). Rimuovilo nelle build di produzione. |
logLevel | 'debug' | 'error' | No | 'error' | 'debug' mostra i log dell'SDK e della pagina CMP. |
| Export | Descrizione |
|---|---|
UniConsentProvider | Componente React con cui racchiudere l'applicazione. Richiede la prop licenseId. |
useConsent() | Hook che restituisce { consentStatus, isLoading, openCMP }. |
| Funzione | Restituisce | Descrizione |
|---|---|---|
getTCString() | Promise<string> | Ottiene la stringa di consenso IAB TCF. |
isEURegion() | Promise<boolean> | Verifica se l'utente si trova in una regione UE/SEE. |
isPurposeConsented(purposeId) | Promise<boolean> | Verifica il consenso per una specifica finalità TCF (ID a partire da 1). |
isVendorConsented(vendorId) | Promise<boolean> | Verifica il consenso per uno specifico fornitore TCF (ID a partire da 1). |
getConsentData() | Promise<ConsentData> | Ottiene un oggetto completo con i dati del consenso. |
getConsentSyncScript() | Promise<string> | Ottiene uno snippet JS per iniettare il consenso in una WebView. |
agreeAll() | Promise<boolean> | Concede il consenso per tutte le finalità, le funzionalità speciali e i fornitori (primo livello personalizzato). |
rejectAll() | Promise<boolean> | Rifiuta tutte le finalità, le funzionalità speciali e i fornitori (primo livello personalizzato). |
getPolicy() | Promise<string> | La policy che si applica all'utente, per il tuo primo livello: gdpr, tcfca, uss, ccpa, categories o none. |
listKV() | Promise<void> | Debug: registra nella console tutte le chiavi di consenso memorizzate. |
clearKV() | Promise<void> | Debug: cancella tutti i dati di consenso memorizzati. |
| Tipo | Descrizione |
|---|---|
CMPDisplayMode | 'fullScreen' | 'bottomSheet' | 'dialog' |
CMPEventType | 'sdkInit' | 'ready' | 'uiDisplay' | 'uiClose' |
CMPEventCallback | (event: { type: CMPEventType }) => void |
ConsentContextValue | Struttura del valore restituito da useConsent(). |
ConsentData | Struttura del valore restituito da getConsentData(). |
ConsentData| Campo | Tipo | Descrizione |
|---|---|---|
tcString | string | Stringa di consenso IAB TCF completa. |
isEURegion | boolean | Indica se l'utente si trova in una regione UE/SEE. |
gdprApplies | boolean | Flag che indica se si applica il GDPR. |
cmpSdkId | number | ID registrato dell'SDK della CMP (68 per UniConsent). |
cmpSdkVersion | number | Versione dell'SDK della CMP. |
policyVersion | number | Versione della policy TCF. |
purposeConsents | string | Stringa binaria delle finalità con consenso (ad es. "10110"). |
vendorConsents | string | Stringa binaria dei fornitori con consenso. |
additionalConsent | string | Stringa Google Additional Consent (AC). |
gvlVersion | number | Versione della Global Vendor List utilizzata. |
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 |
|---|---|
CMPStage.GDPRFirstScreen | Primo livello (banner) |
CMPStage.GDPRSecondScreen | Impostazioni (finalità) |
CMPStage.GDPRVendorsScreen | Fornitori |
CMPStage.CCPAFirstScreen | Primo livello CCPA |
CMPStage.CCPASecondScreen | Impostazioni CCPA |
CMPStage.USStateFirstScreen | Primo livello US State Privacy |
CMPStage.USStateSecondScreen | Impostazioni US State Privacy |
CMPStage.CategoriesFirstScreen | Primo livello delle categorie di cookie (banner) |
CMPStage.CategoriesSecondScreen | Impostazioni delle categorie di cookie |
import { UniConsentProvider, useConsent, CMPStage, getGEO, getGEOState } from 'uniconsent-sdk';
// mostrare la CMP in francese invece che nella lingua del dispositivo, con log di debug ('error', il predefinito, in produzione)
<UniConsentProvider licenseId="YOUR_PUBLISHER_ID" langCode="FR" logLevel="debug">
{/* la tua app */}
</UniConsentProvider>
// 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 ai controlli del consenso; da rimuovere nelle build di produzione
<UniConsentProvider licenseId="YOUR_PUBLISHER_ID" testRegion="CA">
{/* la tua app */}
</UniConsentProvider>
// in un componente: aprire la schermata delle impostazioni
const { openCMP } = useConsent();
openCMP(CMPStage.GDPRSecondScreen);
// regione dell'utente e, per Stati Uniti e Canada, il codice dello stato o della provincia
const geo = await getGEO();
const state = await getGEOState();
La CMP salva le chiavi IAB GPP e la chiave US Privacy in lo storage nativo dell'app (SharedPreferences su Android, UserDefaults su iOS), 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:
import DefaultPreference from 'react-native-default-preference';
const gppString = await DefaultPreference.get('IABGPP_HDR_GppString');
const gppSid = await DefaultPreference.get('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. UniConsentProvider apre la CMP 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 chiama openCMP(), 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:
import { getGPPString, getGPPSID, getUSPrivacyString } from 'uniconsent-sdk';
const gppString = await getGPPString();
const gppSid = await getGPPSID();
const usPrivacy = await 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 UniConsentProvider apre la CMP (consentStatus è pending) 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 CMPStage.CategoriesFirstScreen (banner) e CMPStage.CategoriesSecondScreen (impostazioni). La prop testRegion 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:
import { isCustomPurposeConsented, isCustomVendorConsented, getCustomConsents } from 'uniconsent-sdk';
// dentro una funzione async
if (await isCustomPurposeConsented(1)) {
// avvia l'SDK coperto dalla tua finalità personalizzata 1
}
const vendorAllowed = await isCustomVendorConsented(2);
const all = await 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.
openCMP() ottenuta dall'hook useConsent.UniConsentProvider verifica automaticamente lo stato del consenso all'avvio dell'app, controllando anche se la Global Vendor List (GVL) è stata aggiornata dall'ultima volta in cui l'utente ha dato il consenso. Se la versione della GVL è cambiata, all'utente verrà richiesto nuovamente il consenso.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()openCMP(stage); nuove props langCode e logLevel, getGEO() e getGEOState()CMPStage.CCPAFirstScreen e CMPStage.USStateFirstScreen; nuovo la prop testRegion per provare la CMP come un utente di un'altra regione, ad esempio il CanadaCMPStage.CategoriesFirstScreen e CMPStage.CategoriesSecondScreengetPolicy(); agreeAll() e rejectAll() salvano anche le categorie di cookie, le finalità personalizzate e i fornitori personalizzatitestRegion accetta anche BR, CN, ZA, VN e altri codici paese, e si applica a getPolicy() e ai controlli del consensoisCustomPurposeConsented(), 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.