[Android] 0. Guía de migración
Esta guía le ayudará a migrar de la versión anterior del SDK de CMP a la versión actual. Cubriremos los cambios en los nombres de los métodos, los parámetros y las funciones nuevas o en desuso. Para ver ejemplos de aplicaciones de demostración, consulte este enlaceHay dos carpetas, una con una aplicación de demostración completamente desarrollada en Java, que incluye un contenedor para Java llamado JavaCMPManager
Otro completamente desarrollado en Kotlin.
Tenga en cuenta que esta versión del SDK de CMP se reconstruyó completamente desde cero, por lo que representa una cambio importante y revolucionario, ya que se cambiaron el nombre de todos los métodos y de las firmas, y ahora también se ofrecen devoluciones de llamadas a casi todos los métodos. En todos los casos, deberá modificar su código y actualizar sus dependencias para garantizar que su aplicación móvil funcione como se espera. También Te lo recomiendo encarecidamente para solicitar a sus usuarios que desinstalen y reinstale su aplicación móvil, a fin de evitar problemas con los datos persistentes en el dispositivo.
Repositorios
Tenga en cuenta que todos nuestros repositorios cambiaron para el SDK de Android. Siga las instrucciones a continuación para averiguar dónde apuntar su administrador de dependencias.
Maven
En su archivo Gradle, reemplace la línea anterior por la siguiente:
implementation("net.consentmanager.sdkv3:cmsdkv3:3.0.0")
Después de cambiar, sincronice su proyecto.
Puntos clave de migración
-
Patrón de delegado: En lugar de oyentes individuales, la nueva versión utiliza un único protocolo de delegado (
CMPManagerDelegate
) para gestionar eventos. Contiene 4 eventos principales:-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Esto se activa cuando la capa de consentimiento se cerró después de que el usuario actualizó sus consentimientos O cuando se invocan métodos que provocan cambios en los consentimientos, como acceptAll, rejectAll, acceptVendors, rejectVendors, etc. Significa que el usuario aceptó o rechazó algunos o todos los consentimientos, y que estos se guardaron correctamente en el dispositivo. -
didShowConsentLayer
Esto se activa cuando se muestra realmente la capa de consentimiento. Significa que no había un consentimiento válido en el dispositivo, por lo que se debe recopilar uno nuevo. -
didCloseConsentLayer
Esto se activa cuando el SDK verificó la necesidad de un consentimiento, pero no fue necesario y la capa no se mostró. Significa que ya existe uno válido en el dispositivo, por lo que no es necesario uno nuevo y la capa de consentimiento no se mostrará. -
didReceiveError
Esto se activa cuando la operación del SDK ha generado algún error.
-
- Manejadores de finalización: Muchos métodos ahora incluyen controladores de finalización para operaciones asincrónicas. Actualice su código para manejar estas devoluciones de llamadas de manera adecuada.
-
Cadena de consentimiento: Usa
exportCMPInfo()
en lugar degetConsentString()
para recuperar la información del consentimiento. - Consentimientos del proveedor y finalidad: Los métodos para obtener los consentimientos de los proveedores y de los propósitos ahora devuelven matrices de identificadores. Es posible que deba ajustar su lógica para manejar estas matrices.
-
Cadena de privacidad de EE. UU.: El
getUSPrivacyString()
El método ha quedado obsoleto. Si lo utilizaba para cumplir con la CCPA, tenga en cuenta que este método ya no está disponible. -
Comprobación del requisito de consentimiento: Usa el nuevo
checkIfConsentIsRequired(completion:)
método para determinar automáticamente si es necesario el consentimiento antes de mostrar la capa de consentimiento.
Cambios en métodos y firmas
1. Inicialización
- Old:
CmpManager.initialize(context: Context, cmpConfig: CmpConfig)
- Nuevo:
CmpManager.createInstance(context: Context, cmpConfig: CmpConfig)
2. Establecer la configuración de la interfaz de usuario
- Old:
.withCmpViewControllerConfigurationBlock { ... }
- Nuevo: no se proporciona la opción, pero puede crear una actividad contenedora y controlar el ciclo de vida y la apariencia en su extremo del código.
3. Comprobación del consentimiento
- Old:
check({ ... }, isCached: Bool)
, - Nuevo:
checkIfConsentIsRequired(completion: (Error?) -> Void)
3. Verificar y abrir la capa de consentimiento si es necesario
- Old:
checkAndOpenConsentLayer()
- Nuevo:
checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
4. Capa de consentimiento abierta
- Old:
openConsentLayer()
- Nuevo:
openConsentLayer(completion: (Result<Unit>) -> Unit)
5. Aceptar todos los consentimientos
- Old:
acceptAll(callback: ConsentCallback)
- Nuevo:
cceptAll(completion: (Result<Unit>) -> Unit)
6. Rechazar todos los consentimientos
- Old:
rejectAll(onFinish: () -> Unit)
- Nuevo:
rejectAll(completion: (Result<Unit>) -> Unit)
7. Habilitar propósitos
- Old:
enablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nuevo:
acceptPurposes(purposes: List<String>, updatePurpose: Boolean, completion: (Result<Unit>) -> Unit)
8. Deshabilitar propósitos
- Old:
disablePurposeList(purposes: List<String>, updateVendor: Boolean, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nuevo:
rejectPurposes(purposes: List<String>, updateVendor: Boolean, completion: (Result<Unit>) -> Unit)
9. Habilitar proveedores
- Old:
enableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nuevo:
acceptVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
10. Deshabilitar proveedores
- Old:
disableVendorList(vendors: List<String>, onConsentReceivedCallback: OnConsentReceivedCallback?)
- Nuevo:
rejectVendors(vendors: List<String>, completion: (Result<Unit>) -> Unit)
11. Consigue todos los propósitos
- Old:
getAllPurposes(): List<String>
- Nuevo:
getAllPurposesIDs(): List<String>
12. Obtener propósitos habilitados
- Old:
getEnabledPurposes(): List<String>
- Nuevo:
getEnabledPurposesIDs(): List<String>
13. Obtener todos los proveedores
- Old:
getAllVendors(): List<String>
- Nuevo:
getAllVendorsIDs(): List<String>
14. Obtenga proveedores habilitados
- Old:
getEnabledVendors(): List<String>
- Nuevo:
getEnabledVendorsIDs(): List<String>
15. Verificar el consentimiento de propósito
- Old:
hasPurposeConsent(String): Boolean
- Nuevo:
hasPurposeConsent(id: String): Boolean
16. Verificar el consentimiento del proveedor
- Old:
hasVendorConsent(String): Boolean
- Nuevo:
hasVendorConsent(id: String): Boolean
17. Exportar cadena CMP
- Old:
exportCmpString() : String
- Nuevo:
exportCMPInfo(): String
18. Importar cadena CMP
- Old:
importCmpString(consentString: String, completionHandler: ((Error?) -> Unit)?)
- Nuevo:
importCMPInfo(cmpString: String, completion: (Result<Unit>) -> Unit)
19. Restablecer datos de consentimiento
- Old:
reset()
- Nuevo:
resetConsentManagementData(completion: (Result<Unit>) -> Unit)
Métodos obsoletos:
calledThisDay(): Boolean
getConsentstring(): String
getGoogleACString(): String
getUSPrivacyString(): String
initialize(context: Context, cmpConfig: CmpConfig)
setCallbacks(...)
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface)
Ejemplos de migración
Kotlin
// ============================================
// Previous versions
// ============================================
class CmpDemoActivity : FragmentActivity() {
private lateinit var cmpManager: CmpManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val config = CmpConfig.apply {
id = "<YOUR-CONSENTMANAGER-APP-ID>" // example: b238acdf1a
domain = "<YOUR-CONSENTMANAGER-APP-DOMAIN>" // example: delivery.consentmanager.net
appName = "<YOUR-CONSENTMANAGER-APP-NAME>" // example: testApp
language = "<YOUR-CONSENTMANAGER-APP-LANGUAGE>" // example: DE
}
cmpManager = CmpManager.createInstance(this, config)
cmpManager.initialize(this)
}
}
// ============================================
// SDK v3 implementation
// ============================================
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
val urlConfig = UrlConfig(
id = "09cb5dca91e6b",
domain = "delivery.consentmanager.net",
language = "EN",
appName = "CMDemoAppKotlin"
)
// This UI Config for Android is limited, but you have the option to create an activity wrapper
// to have full control over the appearance and the position
val webViewConfig = ConsentLayerUIConfig(
position = ConsentLayerUIConfig.Position.FULL_SCREEN, // that's the only position available for Android
backgroundStyle = ConsentLayerUIConfig.BackgroundStyle.dimmed(Color.BLACK, 0.5f),
cornerRadius = 10f,
respectsSafeArea = true,
isCancelable = false
)
cmpManager = CMPManager.getInstance(
context = this,
urlConfig = urlConfig,
webViewConfig = webViewConfig,
delegate = this
)
cmpManager.setActivity(this)
checkAndOpenConsentLayer()
}
private fun checkAndOpenConsentLayer() {
cmpManager.checkWithServerAndOpenIfNecessary { result ->
result.onSuccess {
showCMPDemoScreen()
}.onFailure { error ->
Log.e("DemoApp", "Check and open consent layer failed with error: $error")
}
}
}
private fun showCMPDemoScreen() {
setContent {
MaterialTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
CMPDemoScreen(cmpManager)
}
}
}
}
override fun onConfigurationChanged(newConfig: Configuration) {
Log.d("CMP DemoApp", "Configuration changed")
super.onConfigurationChanged(newConfig)
cmpManager.onApplicationResume()
}
override fun onPause() {
Log.d("CMP DemoApp", "Activity paused")
super.onPause()
cmpManager.onApplicationPause()
}
override fun onDestroy() {
Log.d("CMP DemoApp", "Activity destroyed")
super.onDestroy()
cmpManager.onActivityDestroyed()
}
override fun didReceiveConsent(consent: String, jsonObject: JsonObject) {
Log.d("CMP DemoApp", "Consent Layer successfully received consent message.")
runOnUiThread {
showCMPDemoScreen()
}
}
override fun didShowConsentLayer() {
Log.d("CMP DemoApp", "Consent Layer open message received.")
}
override fun didCloseConsentLayer() {
Log.d("CMP DemoApp", "Consent Layer close message received.")
runOnUiThread {
showCMPDemoScreen()
}
}
override fun didReceiveError(error: String) {
Log.e("CMP DemoApp", "SDK error: $error")
}
}
Java
// ===================================================
// Previuous versions
// ===================================================
public class CmpDemoActivity extends AppCompatActivity {
private CmpManager cmpManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CmpConfig cmpConfig = CmpConfig.INSTANCE;
cmpConfig.setId("<YOUR-CONSENTMANAGER-APP-ID>"); // example: a000aaaa1a
cmpConfig.setDomain("<YOUR-CONSENTMANAGER-APP-DOMAIN>"); // example: delivery.consentmanager.net
cmpConfig.setAppName("<YOUR-CONSENTMANAGER-APP-NAME>"); // example: testApp
cmpConfig.setLanguage("<YOUR-CONSENTMANAGER-APP-LANGUAGE>"); // example: EN
cmpConfig.setTimeout(4000);
cmpManager = CmpManager.createInstance(this, cmpConfig);
cmpManager.initialize(this)
}
}
// ===========================================
// SDK v3 implementation
// ===========================================
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cmp_demo);
UrlConfig urlConfig = new UrlConfig(
"09cb5dca91e6b",
"delivery.consentmanager.net",
"EN",
"CMDemoAppJava"
);
// This UI Config for Android is limited, but you have the option to create an activity wrapper
// to have full control over the appearance and the position
ConsentLayerUIConfig webViewConfig = new ConsentLayerUIConfig(
ConsentLayerUIConfig.Position.FULL_SCREEN,
ConsentLayerUIConfig.BackgroundStyle.dimmed(Color.BLACK, 0.5f),
10f,
true,
false
);
JavaCMPManager cmpManager = JavaCMPManager.getInstance(this, urlConfig, webViewConfig, this);
cmpManager.setActivity(this);
cmpManager.checkWithServerAndOpenIfNecessary(result -> {
if (result.isSuccess()) {
} else {
Log.e("JavaDemoAp", "Initialize method failed with error: " + result.exceptionOrNull());
}
return null;
});
}
private void showCMPDemoScreen() {
Intent intent = new Intent(this, CMPDemoActivity.class);
startActivity(intent);
finish();
}
@Override
public void didShowConsentLayer() {
Log.d("CMP JavaDemoAp", "Consent Layer open message received.");
}
@Override
public void didCloseConsentLayer() {
Log.d("CMP JavaDemoAp", "Consent Layer close message received.");
}
@Override
public void didReceiveError(@NonNull String error) {
Log.e("CMP JavaDemoAp", "SDK error: " + error);
}
@Override
public void didReceiveConsent(@NonNull String consent, @NonNull JsonObject jsonObject) {
Log.d("CMP JavaDemoAp", "Consent received: " + consent);
runOnUiThread(this::showCMPDemoScreen);
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
super.onPointerCaptureChanged(hasCapture);
}
@Override
public void addMenuProvider(@NonNull MenuProvider provider, @NonNull LifecycleOwner owner, @NonNull Lifecycle.State state) {
}
}