Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.
Esta guia explica como integrar el SDK de UniConsent CMP en su aplicacion React Native para gestionar el consentimiento GDPR IAB TCF 2.3.
Puede encontrar una aplicacion de demostracion integrada con este SDK en el directorio UniConsentDemo proporcionado junto con el paquete del SDK.
uniconsent-react-native-sdk-26.2.0.zip), descargado desde su panel de UniConsent u obtenido del soporte tecnico.Descargue y descomprima el paquete del SDK (por ejemplo, uniconsent-react-native-sdk-26.2.0.zip). Dentro encontrara:
uniconsent-react-native-sdk-26.2.0.tgz — Paquete del SDK instalable via npmuniconsent-sdk/ — Archivos de la biblioteca del SDK precompiladosUniConsentDemo/ — Aplicacion de demostracionREADME.md — DocumentacionInstale el archivo .tgz usando 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>
Ejemplo: Si coloca el archivo .tgz en la raiz de su proyecto:
npm install ./uniconsent-react-native-sdk-26.2.0.tgz
# or
yarn add file:./uniconsent-react-native-sdk-26.2.0.tgz
Este SDK requiere las siguientes dependencias de pares:
npm install react-native-webview react-native-default-preference
# or
yarn add react-native-webview react-native-default-preference
Si esta desarrollando para iOS, navegue al directorio ios de su proyecto e instale los pods:
cd ios
pod install
cd ..
Antes de integrar el SDK, personalice la apariencia del banner de consentimiento en el panel de UniConsent para que coincida con su marca y optimice las tasas de consentimiento.
Vaya a Projects → Seleccione su Proyecto → Settings → Step 5: UI & Style Settings para configurar:
Para un control mas preciso, agregue CSS personalizado en el campo CSS Content en el Paso 5. Esto se recomienda para que el banner se sienta nativo en su aplicacion y logre la mejor tasa de consentimiento:
/* 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;
}
Consejo: Una interfaz de consentimiento bien personalizada que se sienta nativa en su aplicacion generalmente logra tasas de consentimiento mas altas. Los usuarios son mas propensos a interactuar positivamente con un banner que coincide con la apariencia que esperan.
Envuelva el componente raiz de su aplicacion (o la parte relevante) con UniConsentProvider. Debe proporcionar su licenseId (Publisher ID/pid de 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;
El SDK admite tres modos de visualizacion para la interfaz del CMP, configurados mediante la propiedad displayMode en UniConsentProvider:
| Modo | Descripcion |
|---|---|
'fullScreen' | Pagina a pantalla completa (predeterminado) |
'bottomSheet' | Hoja modal anclada en la parte inferior de la pantalla |
'dialog' | Dialogo modal centrado |
// Full screen (default — no prop needed)
<UniConsentProvider licenseId="YOUR_LICENSE_ID">
// Bottom sheet
<UniConsentProvider licenseId="YOUR_LICENSE_ID" displayMode="bottomSheet">
// Center dialog
<UniConsentProvider licenseId="YOUR_LICENSE_ID" displayMode="dialog">
Escuche los eventos del ciclo de vida del SDK con la propiedad onEvent en UniConsentProvider.
Tipos de eventos disponibles:
'sdkInit' — Inicio de la inicializacion del SDK'ready' — Inicializacion del SDK completada'uiDisplay' — La interfaz de consentimiento se muestra'uiClose' — La interfaz de consentimiento se cierra<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>
Utilice el hook useConsent dentro de un componente dentro del Provider para obtener la funcion openCMP, luego llamela cuando sea necesario (por ejemplo, al presionar un boton).
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>
);
};
Utilice las funciones de utilidad para verificar el estado del consentimiento directamente sin el 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();
Si su aplicacion abre un WebView que carga una pagina web con la etiqueta de UniConsent CMP, puede pasar el estado de consentimiento nativo para que la etiqueta del CMP reconozca el consentimiento existente y no muestre el banner nuevamente.
Utilice getConsentSyncScript() con injectedJavaScriptBeforeContentLoaded para inyectar el consentimiento antes de que se ejecuten los scripts de la 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}
/>
);
};
El SDK proporciona funciones auxiliares para desarrollo y depuracion:
import { listKV, clearKV } from 'uniconsent-sdk';
// Log all stored consent keys to console
await listKV();
// Clear all stored consent data
await clearKV();
UniConsentProvider| Propiedad | Tipo | Requerida | Predeterminado | Descripcion |
|---|---|---|---|---|
licenseId | string | Si | — | Su Publisher ID de UniConsent (pid). |
displayMode | CMPDisplayMode | No | 'fullScreen' | Estilo de visualizacion del CMP: 'fullScreen', 'bottomSheet' o 'dialog'. |
onEvent | CMPEventCallback | No | — | Callback para eventos del ciclo de vida del SDK (sdkInit, ready, uiDisplay, uiClose). |
| Exportacion | Descripcion |
|---|---|
UniConsentProvider | Componente React para envolver su aplicacion. Requiere la propiedad licenseId. |
useConsent() | Hook que devuelve { consentStatus, isLoading, openCMP }. |
| Funcion | Retorna | Descripcion |
|---|---|---|
getTCString() | Promise<string> | Obtener la cadena de consentimiento IAB TCF. |
isEURegion() | Promise<boolean> | Verificar si el usuario esta en una region EU/EEA. |
isPurposeConsented(purposeId) | Promise<boolean> | Verificar el consentimiento para un proposito TCF especifico (ID basado en 1). |
isVendorConsented(vendorId) | Promise<boolean> | Verificar el consentimiento para un proveedor TCF especifico (ID basado en 1). |
getConsentData() | Promise<ConsentData> | Obtener un objeto completo de datos de consentimiento. |
getConsentSyncScript() | Promise<string> | Obtener un fragmento JS para inyectar el consentimiento en un WebView. |
listKV() | Promise<void> | Depuracion: registrar todas las claves de consentimiento almacenadas en la consola. |
clearKV() | Promise<void> | Depuracion: borrar todos los datos de consentimiento almacenados. |
| Tipo | Descripcion |
|---|---|
CMPDisplayMode | 'fullScreen' | 'bottomSheet' | 'dialog' |
CMPEventType | 'sdkInit' | 'ready' | 'uiDisplay' | 'uiClose' |
CMPEventCallback | (event: { type: CMPEventType }) => void |
ConsentContextValue | Forma del valor de retorno de useConsent(). |
ConsentData | Forma del valor de retorno de getConsentData(). |
ConsentData| Campo | Tipo | Descripcion |
|---|---|---|
tcString | string | Cadena completa de consentimiento IAB TCF. |
isEURegion | boolean | Si el usuario esta en una region EU/EEA. |
gdprApplies | boolean | Indicador de aplicacion del GDPR. |
cmpSdkId | number | ID del SDK del CMP registrado (68 para UniConsent). |
cmpSdkVersion | number | Version del SDK del CMP. |
policyVersion | number | Version de la politica TCF. |
purposeConsents | string | Cadena binaria de propositos consentidos (por ejemplo, "10110"). |
vendorConsents | string | Cadena binaria de proveedores consentidos. |
additionalConsent | string | Cadena de consentimiento adicional de Google (AC). |
gvlVersion | number | Version de la Global Vendor List utilizada. |
openCMP() obtenida del hook useConsent.UniConsentProvider verifica automaticamente el estado del consentimiento cuando su aplicacion se inicia, incluyendo si la Global Vendor List (GVL) ha sido actualizada desde la ultima vez que el usuario otorgo su consentimiento. Si la version de la GVL ha cambiado, se solicitara nuevamente el consentimiento al usuario.