Compliant with GDPR, CCPA, COPPA, LGPD, PECR, PDPA, PIPEDA, and more.
UniConsent CMP es un paquete para gestionar el consentimiento GDPR IAB TCF 2.4 en aplicaciones Android. Puede encontrar una aplicación de demostración integrada con UniConsent CMP en el directorio "demo".
Agregue UniConsentSDK-release.aar en el directorio libs/ de su proyecto y actualice su 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'
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 más 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 aplicación 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 aplicación generalmente logra tasas de consentimiento más altas. Los usuarios tienen más probabilidades de interactuar positivamente con un banner que coincide con la apariencia que esperan.
Para usar UniConsent CMP en su aplicación, siga estos pasos:
Inicialice el CMP con un App ID proporcionado por su gestor de cuenta:
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
Mostrar la interfaz del 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);
También puede lanzar con una etapa y modo de visualización específicos:
// 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();
Disponible desde la versión 26.8.0 del SDK.
Ambas proporciones son opcionales: todos los modos de visualización funcionan sin ellas. Pase una proporción (una fracción de la pantalla, mayor que 0 y como máximo 1) solo para sobrescribir el tamaño predeterminado; los valores no válidos lanzan IllegalArgumentException:
| Parámetro | Se aplica a | Valor predeterminado si se omite |
|---|---|---|
heightRatio | BOTTOM_SHEET, DIALOG | Hoja: 90% de la pantalla. Diálogo: 70% |
widthRatio | Solo DIALOG | 90% del ancho de la pantalla, hasta 500dp |
Las proporciones que no se aplican al modo de visualización elegido se ignoran (FULL_SCREEN ignora ambas).
Verificar automáticamente si el consentimiento ha expirado cuando se actualiza la vendorList:
// 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);
Obtener el tcString si es necesario:
// Get tcString
UniConsent.getInstance().getTCString();
Leer el estado del consentimiento:
// Read consent status
UniConsent.getInstance().hasIABPurposeConsent(1);
UniConsent.getInstance().hasIABVendorConsent(1);
Restablecer el estado del consentimiento si es necesario:
// Reset consent status
UniConsent.getInstance().clearData();
Disponible desde la versión 26.7.0 del SDK. Si crea su propia interfaz de consentimiento de primera capa en lugar de mostrar la webview del CMP, puede guardar el consentimiento directamente:
// 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();
Ambas API guardan los mismos valores de consentimiento que el flujo de la interfaz del CMP (claves IAB TCF, consentimiento adicional y señales de consent mode) y disparan el mismo evento de cierre para los suscriptores.
Para los usuarios de EE. UU. y Canadá, ambas API también guardan la elección de CCPA, US State Privacy e IAB TCF Canadá que les corresponde, con las mismas reglas que la interfaz de la CMP, y escriben las claves IAB GPP y US Privacy. Active los modos API-Only en la configuración del proyecto en el panel de UniConsent para que el banner de la CMP no se muestre en esas regiones.
También guardan la elección de categorías de cookies donde se aplica un banner de categorías de cookies (todas las categorías, o solo Estrictamente necesarias), y las finalidades y los proveedores personalizados del proyecto.
Para saber qué primera capa mostrar, llame a getPolicy() (desde la versión 26.10.0 del SDK). Devuelve la política que se aplica al usuario, con las mismas reglas que la CMP: gdpr (IAB TCF), tcfca (IAB TCF Canadá), uss (US State Privacy), ccpa, categories (vea Categorías de cookies más abajo) o none.
UniConsent cmp = UniConsent.getInstance();
if (cmp.shouldRequestConsent()) {
// el usuario debe tomar una decisión: muestre su primera capa para esta política
String policy = cmp.getPolicy(); // gdpr, tcfca o categories
}
Nota: Llame a estas API solo después de que
init()se haya completado (por ejemplo, tras el evento READY). Requieren la lista de proveedores y la configuración del proyecto, que se obtienen durante la inicialización, y devuelvenfalsesi el consentimiento no pudo guardarse.Importante: Su primera capa personalizada debe seguir cumpliendo los requisitos de IAB TCF (divulgar las finalidades y los proveedores, y ofrecer aceptar y rechazar con la misma prominencia). Los usuarios deben poder seguir abriendo la interfaz completa del CMP (
launchCMP()) para tomar decisiones granulares.
Si su aplicación abre un WebView que carga una página 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.
Inyecte el consentimiento al inicio de la página, antes de que se ejecute la etiqueta del 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" />
Abra la CMP en una pantalla concreta, por ejemplo desde un enlace "Configuración de privacidad" de su app. La pantalla solicitada siempre se abre. Para los usuarios de EE. UU., las pantallas de configuración abren la configuración de CCPA o US State Privacy que les corresponde. Los usuarios de Canadá ven la versión IAB TCF Canada de las pantallas de IAB TCF.
| Pantalla | Muestra |
|---|---|
Stage.GDPRFirstScreen | Primera capa (banner) |
Stage.GDPRSecondScreen | Configuración (finalidades) |
Stage.GDPRVendorsScreen | Proveedores |
Stage.CCPAFirstScreen | Primera capa de CCPA |
Stage.CCPASecondScreen | Configuración de CCPA |
Stage.USStateFirstScreen | Primera capa de US State Privacy |
Stage.USStateSecondScreen | Configuración de US State Privacy |
Stage.CategoriesFirstScreen | Primera capa de categorías de cookies (banner) |
Stage.CategoriesSecondScreen | Configuración de categorías de cookies |
UniConsent cmp = UniConsent.getInstance();
// abrir la pantalla de configuración
cmp.launchCMP(Stage.GDPRSecondScreen);
// mostrar la CMP en francés en lugar del idioma del dispositivo (código de dos letras)
cmp.setLanguage("FR");
// registros de depuración del SDK y de la página de la CMP; use LogLevel.ERROR (predeterminado) en las versiones de producción
cmp.setLogLevel(LogLevel.DEBUG);
// solo para pruebas: mostrar la CMP como para un usuario de otra región, "EU", "CA" (Canadá), "CAQC" (Quebec), "US" más un código de estado como "USCA" o "USTX", "BR", "CN", "ZA", "VN" o cualquier otro código de país, o "N" (fuera de estas regiones). También se aplica a getPolicy() y shouldRequestConsent(); elimínelo en las versiones de producción
cmp.setTestRegion("CA");
// cerrar la CMP si está abierta
cmp.dismissCMP();
// el usuario ha hecho una elección: IAB TCF, CCPA, US State Privacy o IAB TCF Canadá
boolean given = cmp.isConsentGiven();
// días desde que se creó el consentimiento IAB TCF, 0 si no hay ninguno
int days = cmp.getConsentAge();
// región del usuario y, para EE. UU. y Canadá, el código del estado o la provincia (vacío si se desconoce)
String geo = cmp.getGEO();
String state = cmp.getGEOState();
La CMP guarda las claves IAB GPP y la clave US Privacy en las SharedPreferences predeterminadas de la app, tal como las definen las especificaciones de IAB. Los SDK de publicidad de su app las leen desde ahí; no hace falta cambiar código. Las claves GPP se escriben cuando GPP, US State Privacy o IAB TCF Canadá está activado en la configuración del proyecto en el panel de UniConsent. La clave US Privacy se escribe siempre que la CCPA esté activada.
| Clave | Valor |
|---|---|
IABGPP_HDR_Version | Versión de GPP (1) |
IABGPP_HDR_Sections | ID de sección en la cadena GPP, separados por _ |
IABGPP_HDR_GppString | La cadena GPP completa |
IABGPP_GppSID | ID de sección que se aplican al usuario, separados por _, o -1 si no se aplica ninguno |
IABGPP_2_String | Cadena IAB TCF EU, cuando se aplica el RGPD |
IABGPP_5_String | Cadena IAB TCF Canadá, cuando se aplica TCF Canadá |
IABGPP_6_String | Cadena US Privacy, cuando se aplica la CCPA |
IABGPP_7_String | Cadena US National (usnat), cuando se aplica US State Privacy o la CCPA |
IABGPP_8_String a IABGPP_27_String | La sección del estado del usuario (8 California a 27 Rhode Island), cuando se aplica US State Privacy, o California con la CCPA, según el ajuste GPP Sections |
IABUSPrivacy_String | Cadena US Privacy siempre que la CCPA esté activada: la elección del usuario en la región CCPA; si no, 1--- |
Las claves se actualizan cada vez que se carga la CMP y después de cada elección de consentimiento. Al desactivar GPP, se eliminan las claves IABGPP_. Para leerlas usted mismo:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String gppString = prefs.getString("IABGPP_HDR_GppString", "");
String gppSid = prefs.getString("IABGPP_GppSID", "");
Las apps admiten las mismas opciones para EE. UU. y Canadá que los sitios web: CCPA, US State Privacy (con la lista de estados y los ajustes GPP Sections y MSPA) e IAB TCF Canadá. shouldRequestConsent() devuelve true para los usuarios de Canadá a los que se aplica IAB TCF Canadá hasta que toman una decisión. La privacidad en EE. UU. es de exclusión voluntaria, así que a los usuarios de EE. UU. no se les pregunta por sí solo: ven el banner o los ajustes de EE. UU. cuando su app abre la CMP, por ejemplo desde un enlace a la configuración de privacidad. Hasta entonces, cuando la CCPA o US State Privacy están activadas, el SDK escribe las claves US Privacy y GPP predeterminadas para los usuarios de EE. UU. sin mostrar nada: sin exclusión, o con exclusión cuando el seguimiento publicitario está desactivado en el dispositivo. US State Privacy empieza desactivado en los proyectos Mobile App nuevos; actívelo en el panel.
Si el usuario ha desactivado el seguimiento publicitario en el dispositivo, la CMP lo trata como una exclusión de EE. UU. de la venta, el intercambio y la publicidad dirigida, como hace Global Privacy Control en los sitios web. En iOS es el seguimiento no permitido en App Tracking Transparency; en Android, un ID de publicidad eliminado o la limitación del seguimiento publicitario, que se lee a través de los servicios de Google Play cuando su app los incluye. Una elección que el usuario guarde después en el banner tiene prioridad.
El SDK también devuelve las cadenas guardadas:
String gppString = UniConsent.getInstance().getGPPString();
String gppSid = UniConsent.getInstance().getGPPSID();
String usPrivacy = UniConsent.getInstance().getUSPrivacyString();
Disponible desde la versión 26.10.0 del SDK. Donde una región usa categorías de cookies en lugar de IAB TCF o las políticas de EE. UU., la CMP muestra un banner con cuatro categorías: Estrictamente necesarias, Rendimiento, Funcionalidad, y Segmentación o publicidad. Se aplica a:
Las categorías opt-in empiezan solo con Estrictamente necesarias activada, y shouldRequestConsent() devuelve true hasta que el usuario toma una decisión, y de nuevo después de cambiar la versión de configuración. Las categorías opt-out empiezan con todas las categorías activadas (Segmentación desactivada cuando el seguimiento publicitario está desactivado en el dispositivo en EE. UU.), y la app no pregunta por sí sola: los usuarios las cambian desde su enlace a la configuración de privacidad. Opt-out se aplica a una regla opt-out para otros países y, en apps, a un proyecto Consent Categories en EE. UU.
Abra las pantallas de categorías con Stage.CategoriesFirstScreen (banner) y Stage.CategoriesSecondScreen (configuración). setTestRegion() también acepta BR, CN, ZA, VN y otros códigos de país, para probar estas regiones.
Disponible desde la versión 26.10.0 del SDK. Las finalidades personalizadas y los proveedores personalizados que añada en la configuración del proyecto en el panel de UniConsent se muestran en las pantallas de la CMP: las finalidades personalizadas en la primera capa y la configuración de IAB TCF y en la configuración de categorías de cookies, los proveedores personalizados en la lista de proveedores de IAB TCF. En la configuración de CCPA y US State Privacy solo se listan las finalidades personalizadas sensibles. En la configuración de categorías de cookies los proveedores personalizados siguen la categoría Segmentación o publicidad. Donde IAB TCF no se aplica (categorías de cookies y EE. UU.), los proveedores personalizados se listan en modo de solo lectura en la lista de proveedores del menú, y en la configuración de categorías de cookies en Segmentación o publicidad.
Para iniciar o detener sus propios SDK según ellos, pregunte al SDK si la app puede usar ahora una finalidad personalizada o un proveedor personalizado. La respuesta sigue la política del usuario, con las mismas reglas que la CMP usa para las etiquetas:
UniConsent cmp = UniConsent.getInstance();
if (cmp.isCustomPurposeConsented(1)) {
// inicie el SDK que cubre su finalidad personalizada 1
}
boolean vendorAllowed = cmp.isCustomVendorConsented(2);
Map<String, Map<String, Boolean>> all = cmp.getCustomConsents(); // {"purposes": {"1": true}, "vendors": {"2": false}}
Vuelva a llamarlas después de que la CMP se cierre o cambie el consentimiento. Los ID que el proyecto no tiene, y todos los ID antes de que el SDK esté listo, devuelven false.
La CMP puede listar los SDK de terceros de su app (redes publicitarias, analítica, atribución y otros) con su empresa, su finalidad y su política de privacidad. Los usuarios los ven en la lista de proveedores, de solo lectura en todas las regiones: no hay interruptores, y su app sigue activando o desactivando cada SDK según las elecciones del usuario para los propósitos o las categorías de cookies.
Para definir la lista, active Enable Third-party SDKs en Step 4: Advanced Features de su proyecto de app, elija sus SDK en la pestaña Third-party SDKs o añada los suyos, y luego guarde y publique. No necesita código en su app.
Configurar el estado de consentimiento predeterminado KV:
<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" />
Controlar la analítica basada en las opciones de consentimiento:
// <= 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);
}
Encuentre más información en Set up consent mode for apps
El SDK soporta tres modos de visualización para la interfaz de consentimiento, coincidiendo con la API del SDK de Flutter:
| Modo | Enum | Descripción |
|---|---|---|
| Pantalla completa | CMPDisplayMode.FULL_SCREEN | Abre el CMP en una nueva actividad a pantalla completa (predeterminado) |
| Hoja inferior | CMPDisplayMode.BOTTOM_SHEET | Se desliza desde la parte inferior como una hoja modal (90% de altura) |
| Diálogo | CMPDisplayMode.DIALOG | Se muestra como un diálogo centrado (90% de ancho, 70% de altura) |
Nota: Los modos de hoja inferior y diálogo requieren que su Activity extienda
AppCompatActivityoFragmentActivity.
getGPPString(), getGPPSID() y getUSPrivacyString()Stage.USStateSecondScreen; nuevos setLanguage(), dismissCMP(), isConsentGiven(), getConsentAge() y getGEOState()Stage.CCPAFirstScreen y Stage.USStateFirstScreen; nuevo setTestRegion() para probar la CMP como un usuario de otra región, por ejemplo CanadáStage.CategoriesFirstScreen y Stage.CategoriesSecondScreengetPolicy(); agreeAll() y rejectAll() también guardan las categorías de cookies, las finalidades personalizadas y los proveedores personalizadossetTestRegion() también acepta BR, CN, ZA, VN y otros códigos de país, y se aplica a getPolicy() y shouldRequestConsent()isCustomPurposeConsented(), isCustomVendorConsented() y getCustomConsents(): las finalidades y los proveedores personalizados que la app puede usar ahora según la política del usuario