Info
Contenido

[iOS] 2. Documentación de la API

El sistema CMPManager La clase proporciona métodos para gestionar el consentimiento del usuario para el procesamiento y seguimiento de datos. Esta documentación cubre los principales métodos disponibles para la integración de aplicaciones móviles. 

Todos los ejemplos mencionados a continuación fueron extraídos y se pueden encontrar en nuestro Aplicación de demostración.

Por favor, checa el métodos obsoletos en caso de que ya esté integrando la versión 3 de nuestro CMP SDK.

Inicialización

establecerUrlConfig()

Establece la configuración de URL para el Consent Manager.

parámetros:

  • config: Un UrlConfig objeto que contiene las siguientes propiedades:
    • id: Cadena: el ID de código recuperado de su panel de CMP
    • domain: Cadena: el dominio para la gestión del consentimiento, también recuperado del panel de control
    • language: Cadena - El código de idioma (por ejemplo, "EN", "IT", "DE", etc.)
    • appName: Cadena: el nombre de su aplicación, utilizado únicamente con fines de informes. 

Devoluciones: Void

Ejemplo:

CMPManager.shared.setUrlConfig(UrlConfig(
    id: "0a000000000a1",					// The Code-ID retrieved from your CMP dashboard
    domain: "delivery.consentmanager.net",  // The domain retrieved from your CMP dashboard
    language: "EN",							// Language code, examples: IT, DE, EN, etc. 
    appName: "MyApp"						// The name of your app, used for reporting purposes on your CMP dashboard
))

Establezca la configuración de WebView ()

Configura la apariencia y comportamiento del WebView de consentimiento. Puedes establecer la posición en la que aparecerá el objeto WKWebiew que muestra la capa de consentimiento, como pantalla completa, en la mitad inferior de la pantalla o en la mitad superior de la misma. También se puede aplicar el estilo de fondo, así como el radio de las esquinas, si respetará la zona segura del dispositivo, así como si responderá a los cambios de orientación o no, en caso de que tu móvil funcione solo en una única orientación, lo que suele ocurrir con los juegos que solo utilizan la configuración horizontal de la pantalla del dispositivo.   

parámetros:

  • config: Un ConsentLayerUIConfig objeto con las siguientes propiedades:
    • position: Posición: la posición de la vista web (por ejemplo, .fullScreen)
    • backgroundStyle: BackgroundStyle - El estilo de fondo (por ejemplo, .dimmed)
    • cornerRadius: CGFloat - El radio de la esquina de WebView
    • respectsSafeArea: Bool - Si se debe respetar el área segura
    • allowsOrientationChanges: Bool - Si se permiten cambios de orientación

Devoluciones: Void

Ejemplo:

CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig(
    position: .fullScreen,
    backgroundStyle: .dimmed(.black, 0.5),
    cornerRadius: 10,
    respectsSafeArea: true,
    allowsOrientationChanges: true
))

ConjuntoPresentingViewController()

Establece el controlador de vista que presentará la capa de consentimiento. Normalmente, se pasa self como el controlador de vista actual. 

parámetros:

  • viewController:UIViewController: el controlador de vista para presentar la capa de consentimiento

Devoluciones: Void

Ejemplo:

CMPManager.shared.setPresentingViewController(self)

obtenerEstadoUsuario()

Devuelve una instantánea detallada del estado de consentimiento y las preferencias actuales del usuario. Este método proporciona información completa sobre las opciones de consentimiento del usuario, incluido su estado de consentimiento general, los permisos de proveedores individuales, los consentimientos específicos para cada propósito y las cadenas de consentimiento relevantes.

parámetros:

  • Nona

Devoluciones:

Tipo de retorno: CMPUserStatusResponse objeto, explicado en el código siguiente. 

Ejemplo:

let status = CMPManager.shared.getUserStatus()
var message = "Status: \(status.status)\n\n"

message += "Vendors:\n"
for (vendorId, state) in status.vendors {
    message += "- \(vendorId): \(state)\n"
}

message += "\nPurposes:\n"
for (purposeId, state) in status.purposes {
    message += "- \(purposeId): \(state)\n"
}

message += "\nTCF: \(status.tcf)\n"
message += "Additional Consent: \(status.addtlConsent)\n"
message += "Regulation: \(status.regulation)"

print(message)

comprobarYAbrir()

Consulta con el servidor si se requiere consentimiento y abre la capa de consentimiento si es necesario. Esto hará una llamada de red a nuestros servidores a través de WKWebView creado dentro de nuestro SDK. Consumiendo una página vista en el proceso. Esta llamada de red enviará un mensaje a nuestro backend a través de JavaScript, que detectará si el dispositivo tiene un consentimiento válido o no, lo que a su vez determinará si es necesario mostrar la capa de consentimiento o no.  

parámetros:

  • jumpToSettings:Un valor booleano para determinar si la capa de consentimiento mostrada conducirá automáticamente a la página donde hay un control más granular sobre los consentimientos dados por los usuarios, lo que les permite ajustar sus opciones (cuando se configura en true) o la pantalla predeterminada inicial con los botones (cuando se configura en false o suprimido).
  • completion:Un cierre llamado cuando la operación se completa.

Devoluciones: Void

Ejemplo:

CMPManager.shared.checkAndOpen { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Check completed successfully")
    }
}

forzarAbrir()

parámetros:

  • jumpToSettings:Un valor booleano para determinar si la capa de consentimiento mostrada conducirá automáticamente a la página donde hay un control más granular sobre los consentimientos dados por los usuarios, lo que les permite ajustar sus opciones (cuando se configura en true) o la pantalla predeterminada inicial con los botones (cuando se configura en false o suprimido).
  • completion:Un cierre llamado cuando la operación se completa, devolviendo un éxito o un error.

Devoluciones: Void

Ejemplo:

CMPManager.shared.forceOpen { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Consent layer opened successfully")
    }
}

exportarCMPInfo()

Exporta la información de consentimiento actual almacenada en el dispositivo como una cadena. Este método recupera la cadena de consentimiento del área UserDefaults del dispositivo y la devuelve. Por lo general, esta información se pasa al importCMPInfo método.

Devoluciones: Cadena: la información de consentimiento exportada

Ejemplo:

let cmpInfo = CMPManager.shared.exportCMPInfo()
print("Exported CMP info: \(cmpInfo)")

obtener el estado del modo de consentimiento de Google()

Se integra perfectamente con el modo de consentimiento, una tecnología de Google que permite el modelado de conversión y análisis. Permitir que los servicios de Google rellenen lagunas de datos cuando los usuarios no dan su consentimiento. Esta función traduce el consentimiento del usuario de su CMP a un formato que Firebase Analytics puede entender, de modo que puede simplemente obtener el retorno de este método y pasarlo al método .setConsent de Firebase.

  • Luego actualiza Google Analytics con el estado de consentimiento actual del usuario.

parámetros:

  • Nona

Devoluciones: [String: String] - Una matriz de valores clave con las cuatro claves del modo de consentimiento de Google: .analyticsStorage, .adStorage, .adUserData y .adPersonalization, y sus respectivos valores en términos de .choiceDoesntExist, .granted or .denied.

Ejemplo:

showToast(message: "Google Consent Mode Status: \n \(CMPManager.shared.getGoogleConsentModeStatus())")

obtenerEstadoParaPropósito()

parámetros:

  • id: Cadena: el ID del propósito a verificar

Devoluciones: UniqueConsentStatus - Una enumeración con los valores .choiceDoesntExist Si no se dio el consentimiento, .granted or .denied.

Ejemplo:

let purposeStatus = CMPManager.shared.getStatusForPurpose(id: "c53")
var message = "Purpose c53 status: "
switch purposeStatus {
   	case .choiceDoesntExist: message += "No Choice"
    case .granted: message += "Granted"
    case .denied: message += "Denied"
    @unknown default: message += "No Choice"
}

Obtener estado del vendedor()

parámetros:

  • id: Cadena: el ID del propósito a verificar

Devoluciones: UniqueConsentStatus - Una enumeración con los valores .choiceDoesntExist Si no se dio el consentimiento, .granted or .denied.

Ejemplo:

let purposeStatus = CMPManager.shared.getStatusForVendor(id: "s2789")
var message = "Vendor s2789's status: "
switch purposeStatus {
   	case .choiceDoesntExist: message += "No Choice"
    case .granted: message += "Granted"
    case .denied: message += "Denied"
    @unknown default: message += "No Choice"
}

aceptar todo()

parámetros:

  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.acceptAll { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("All consents accepted successfully")
    }
}

aceptarPropósitos()

parámetros:

  • purposes: [Cadena] - Una matriz de identificaciones de propósito para aceptar
  • updatePurpose: Bool - Si se deben actualizar los propósitos relacionados
  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.acceptPurposes(["c52", "c53"], updatePurpose: true) { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Purposes accepted successfully")
    }
}

aceptarProveedores()

parámetros:

  • vendors: [Cadena] - Una matriz de identificaciones de proveedores para aceptar
  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.acceptVendors(["s2790", "s2791"]) { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Vendors accepted successfully")
    }
}

importarCMPInfo()

parámetros:

  • cmpString: Cadena: la cadena CMP que se importará
  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

let cmpString = "Q1FERkg3QVFERkg3QUFmR01CSVRCQkVnQUFBQUFBQUFBQWlnQUFBQUFBQUEjXzUxXzUyXzUzXzU0XzU1XzU2XyNfczI3ODlfczI3OTBfczI3OTFfczI2OTdfczk3MV9VXyMxLS0tIw"
CMPManager.shared.importCMPInfo(cmpString) { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("CMP info imported successfully")
    }
}

rechazarTodo()

parámetros:

  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.rejectAll { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("All consents rejected successfully")
    }
}

rechazarPropósitos()

parámetros:

  • purposes: [Cadena] - Una matriz de identificaciones de propósitos para rechazar
  • updateVendor: Bool - Si se deben actualizar los proveedores relacionados
  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.rejectPurposes(["c52", "c53"], updateVendor: true) { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Purposes rejected successfully")
    }
}

rechazarVendedores()

parámetros:

  • vendors: [Cadena] - Una matriz de identificaciones de proveedores para rechazar
  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.rejectVendors(["s2790", "s2791"]) { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Vendors rejected successfully")
    }
}

 

restablecerConsentManagementData()

parámetros:

  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.resetConsentManagementData { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Consent management data reset successfully")
    }
}

 

Eventos de CMPManagerDelegate

obtenerDevolución de llamada del enlace de clic

El SDK proporciona un mecanismo de gestión de enlaces flexible que permite a las aplicaciones personalizar la forma en que se gestionan las URL dentro de la capa de consentimiento. De forma predeterminada, todos los enlaces se abren dentro de WebView, pero las aplicaciones pueden interceptar URL específicas para gestionarlas externamente cuando sea necesario.

// Example 1: Handle specific domains in external browser
cmpManager.setLinkClickHandler { url in
    // Handle links to specific domains externally
    if url.host?.contains("google.com") == true || 
       url.host?.contains("facebook.com") == true {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
        return true // URL handled externally
    }
    
    // Let other URLs load in the WebView
    return false
}

// Example 2: Handle URLs based on scheme
cmpManager.setLinkClickHandler { url in
    // Open mail links in mail app
    if url.scheme == "mailto" {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
        return true
    }
    
    // Open tel links in phone app
    if url.scheme == "tel" {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
        return true
    }
    
    // Let all other URLs load in the WebView
    return false
}

didReceiveConsent(consentimiento: String, jsonObject: [String: Cualquiera])

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.

¿Mostró la capa de consentimiento?

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.

¿Cerrar capa de consentimiento?


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á.

Error de recepción

Esto se activa cuando el SDK detecta algún error y devuelve su código.

Métodos obsoletos

Todos los métodos siguientes quedaron obsoletos y será completamente eliminado desde el SDK de Julio / 2025 en. 

comprobarSiSeRequiereConsentimiento()

parámetros:

  • completion: (Bool) -> Void - Un cierre llamado con el resultado, ya sea true or false.

Devoluciones: Voz

Ejemplo:

CMPManager.shared.checkIfConsentIsRequired { required in
    print("Consent is required: \(required)")
}

saltarAConfiguración()

parámetros:

  • completion:Un cierre llamado cuando la operación se completa

Devoluciones: Void

Ejemplo:

CMPManager.shared.jumpToSettings { error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
    } else {
        print("Jumped to settings successfully")
    }
}

tienePropósitoConsentimiento()

Nota: ¡Siempre verifique primero si hay una opción disponible para el usuario! En los casos en que no exista ninguna opción, la función puede devolver valores de retorno inesperados.

parámetros:

  • id: Cadena: el ID del propósito a verificar

Devoluciones: Bool - True Si se da el consentimiento, false de otra manera

Ejemplo:

let hasPurposeConsent = CMPManager.shared.hasPurposeConsent(id: "c53")
print("Has consent for purpose c53: \(hasPurposeConsent)")

tieneSelecciónDeUsuario()

Comprueba si el usuario ha elegido los consentimientos y si estos se almacenan en el dispositivo. Esto significa que el usuario aceptó todos los consentimientos, los rechazó todos o eligió una combinación de consentimientos aceptados y rechazados, según el diseño de la CMP, lo que podría permitir a los usuarios aceptar algunos de los consentimientos y rechazar otros. Esta información solo se actualizará después de que el consentimiento se conserve correctamente en el área UserDefaults, por lo que si realiza la verificación inmediatamente después de usar métodos que desencadenan cambios en el consentimiento como openConsentLayer, acceptAll or rejectAll, por ejemplo, entonces Espere hasta que se active la devolución de llamada de esos métodos antes de acceder al método. hasUserChoice, Para asegurarse de que la información esté actualizada.

Devoluciones: bool - true Si el usuario ha hecho una elección, false de otra manera

Ejemplo:

let hasChoice = CMPManager.shared.hasUserChoice()
print("User has made a choice: \(hasChoice)")

tiene consentimiento del vendedor ()

parámetros:

  • id: Cadena: el ID del proveedor a verificar

Devoluciones: Bool - True Si se da el consentimiento, false de otra manera

Ejemplo:

let hasVendorConsent = CMPManager.shared.hasVendorConsent(id: "s2789")
print("Has consent for vendor s2789: \(hasVendorConsent)")

obtenerIDsDeTodosLosPropósitos()

Recupera todos los ID de propósito almacenados en el dispositivo, de acuerdo con las configuraciones de CMP. Esta información solo se actualizará después de que el consentimiento se conserve correctamente en el área UserDefaults, por lo que si realiza la verificación inmediatamente después de usar métodos que desencadenan cambios en el consentimiento como openConsentLayer, acceptAll or rejectAll, por ejemplo, entonces Espere hasta que se active la devolución de llamada de esos métodos antes de acceder al método. hasUserChoice, Para asegurarse de que la información esté actualizada.

Devoluciones: [Cadena] - Una matriz de identificaciones para todos los propósitos

Ejemplo:

let allPurposes = CMPManager.shared.getAllPurposesIDs()
print("All purposes: \(allPurposes)")

obtenerIDDeTodosLosProveedores()

Recupera todos los ID de proveedores almacenados en el dispositivo, de acuerdo con las configuraciones de CMP. Esta información solo se actualizará después de que el consentimiento se conserve correctamente en el área UserDefaults, por lo que si realiza la verificación inmediatamente después de usar métodos que desencadenan cambios en el consentimiento como openConsentLayer, acceptAll or rejectAll, por ejemplo, entonces Espere hasta que se active la devolución de llamada de esos métodos antes de acceder al método. hasUserChoice, Para asegurarse de que la información esté actualizada.

Devoluciones: [Cadena] - Una matriz de todos los ID de proveedores

Ejemplo:

let allVendors = CMPManager.shared.getAllVendorsIDs()
print("All vendors: \(allVendors)")

obtenerIDsPropósitosDeshabilitados()

Recupera los ID de todas las finalidades deshabilitadas almacenadas en el dispositivo, según las configuraciones de CMP y las elecciones del usuario. Si el usuario acepta todos los consentimientos, este campo estará vacío.  Esta información solo se actualizará después de que el consentimiento se conserve correctamente en el área UserDefaults, por lo que si realiza la verificación inmediatamente después de usar métodos que desencadenan cambios en el consentimiento como openConsentLayer, acceptAll or rejectAll, por ejemplo, entonces Espere hasta que se active la devolución de llamada de esos métodos antes de acceder al método. hasUserChoice, Para asegurarse de que la información esté actualizada.

Devoluciones: [Cadena] - Una matriz de identificaciones de propósitos deshabilitados

Ejemplo:

let disabledPurposes = CMPManager.shared.getDisabledPurposesIDs()
print("Disabled purposes: \(disabledPurposes)")

obtenerID de proveedores deshabilitados()

Recupera los ID de todos los proveedores deshabilitados almacenados en el dispositivo, según las configuraciones de CMP. Si el usuario acepta todos los consentimientos, este campo estará vacío. Esta información solo se actualizará después de que el consentimiento se conserve correctamente en el área UserDefaults, por lo que si realiza la verificación inmediatamente después de usar métodos que desencadenan cambios en el consentimiento como openConsentLayer, acceptAll or rejectAll, por ejemplo, entonces Espere hasta que se active la devolución de llamada de esos métodos antes de acceder al método. hasUserChoice, Para asegurarse de que la información esté actualizada.

Devoluciones: [Cadena] - Una matriz de identificaciones de proveedores deshabilitados

Ejemplo:

let disabledVendors = CMPManager.shared.getDisabledVendorsIDs()
print("Disabled vendors: \(disabledVendors)")

obtenerEnabledPurposesIDs()

Recupera los ID de todas las finalidades habilitadas almacenadas en el dispositivo, según las configuraciones del CMP. Si el usuario rechaza todos los consentimientos, este campo quedará vacío. Esta información solo se actualizará después de que el consentimiento se conserve correctamente en el área UserDefaults, por lo que si realiza la verificación inmediatamente después de usar métodos que desencadenan cambios en el consentimiento como openConsentLayer, acceptAll or rejectAll, por ejemplo, entonces Espere hasta que se active la devolución de llamada de esos métodos antes de acceder al método. hasUserChoice, Para asegurarse de que la información esté actualizada.

Devoluciones: [Cadena] - Una matriz de identificaciones de propósitos habilitados

Ejemplo:

let enabledPurposes = CMPManager.shared.getEnabledPurposesIDs()
print("Enabled purposes: \(enabledPurposes)")

obtenerEnabledVendorsIDs()

Recupera los ID de todos los proveedores habilitados almacenados en el dispositivo. Si el usuario rechaza todos los consentimientos, este campo estará vacío. Esta información solo se actualizará después de que el consentimiento se conserve correctamente en el área UserDefaults, por lo que si realiza la verificación inmediatamente después de usar métodos que desencadenan cambios en el consentimiento como openConsentLayer, acceptAll or rejectAll, por ejemplo, entonces Espere hasta que se active la devolución de llamada de esos métodos antes de acceder al método. hasUserChoice, Para asegurarse de que la información esté actualizada.

Devoluciones: [Cadena] - Una matriz de identificaciones de proveedores habilitados

Ejemplo:

let enabledVendors = CMPManager.shared.getEnabledVendorsIDs()
print("Enabled vendors: \(enabledVendors)")

Excepcionalmente, y debido a que los eventos del ciclo de vida de la aplicación son inaccesibles desde el contexto del SDK, estos métodos ya se eliminaron para evitar confusiones. Debe gestionar el consentimiento de ATT en su aplicación móvil. Para más información, consulte documentación oficial de Apple

solicitudATTAutorización()

Solicita autorización de transparencia de seguimiento de aplicaciones al usuario. 

obtenerEstadoAutorizaciónATT()

Obtiene el estado actual de autorización de transparencia de seguimiento de aplicaciones.

 

Volver