[iOS] 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 click en este enlace.
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 iOS. Siga las instrucciones a continuación para averiguar dónde apuntar su administrador de dependencias.
Además, tenga en cuenta que nosotros No proporcione una versión estática de nuestro marco personalizado.
Cocoápodo
En su Podfile, reemplace la línea anterior por la siguiente:
pod 'cm-sdk-ios-v3, '3.0.0'
Después de cambiar, ejecute esto en la línea de comandos:
pod install --repo-update
Administrador de paquetes Swift
Nuestro paquete XCFramework ahora está alojado en https://github.com/iubenda/cm-sdk-xcframework-v3.
En XCode, vaya al menú Archivo > Agregar paquete dependiente y apúntelo a la URL anterior.
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.: La directiva
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:
CMPConsentTool(cmpConfig: CmpConfig).initialize()
- Nuevo:
CMPManager.shared.setUrlConfig(UrlConfig)
2. Establecer la configuración de la interfaz de usuario
- Old:
.withCmpViewControllerConfigurationBlock { ... }
- Nuevo:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
3. Verificar y abrir la capa de consentimiento
- Old:
check({ ... }, isCached: Bool)
- Nuevo:
checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
4. Capa de consentimiento abierta
- Old:
openView()
- Nuevo:
openConsentLayer(completion: (Error?) -> Void)
5. Aceptar todos los consentimientos
- Old:
acceptAll(onFinish: () -> Void)
- Nuevo:
acceptAll(completion: (Error?) -> Void)
6. Rechazar todos los consentimientos
- Old:
rejectAll(onFinish: () -> Void)
- Nuevo:
rejectAll(completion: (Error?) -> Void)
7. Habilitar propósitos
- Old:
enablePurposeList([String], onFinish: () -> Void)
- Nuevo:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
8. Deshabilitar propósitos
- Old:
disablePurposeList([String], onFinish: () -> Void)
- Nuevo:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
9. Habilitar proveedores
- Old:
enableVendorList([String], onFinish: () -> Void)
- Nuevo:
acceptVendors([String], completion: (Error?) -> Void)
10. Deshabilitar proveedores
- Old:
disableVendorList([String], onFinish: () -> Void)
- Nuevo:
rejectVendors([String], completion: (Error?) -> Void)
11. Consigue todos los propósitos
- Old:
getAllPurposes() -> String
- Nuevo:
getAllPurposesIDs() -> [String]
12. Obtener propósitos habilitados
- Old:
getEnabledPurposes() -> String
- Nuevo:
getEnabledPurposesIDs() -> [String]
13. Obtener todos los proveedores
- Old:
getAllVendors() -> String
- Nuevo:
getAllVendorsIDs() -> [String]
14. Obtenga proveedores habilitados
- Old:
getEnabledVendors() -> String
- Nuevo:
getEnabledVendorsIDs() -> [String]
15. Verificar el consentimiento de propósito
- Old:
hasPurposeConsent(String) -> Bool
- Nuevo:
hasPurposeConsent(id: String) -> Bool
16. Verificar el consentimiento del proveedor
- Old:
hasVendorConsent(String) -> Bool
- Nuevo:
hasVendorConsent(id: String) -> Bool
17. Exportar cadena CMP
- Old:
exportCmpString() -> String
- Nuevo:
exportCMPInfo() -> String
18. Importar cadena CMP
- Old:
importCmpString(String, completion: (Error?) -> Void)
- Nuevo:
importCMPInfo(String, completion: (Error?) -> Void)
19. Restablecer datos de consentimiento
- Old:
reset()
- Nuevo:
resetConsentManagementData(completion: (Error?) -> Void)
Métodos obsoletos:
consentRequestedToday() -> Bool
isConsentRequired() -> Bool
withCloseListener(() -> Void)
withOpenListener(() -> Void)
withErrorListener((CmpErrorType, String?) -> Void)
withOnCMPNotOpenedListener(() -> Void)
withOnCmpButtonClickedCallback((CmpButtonEvent) -> Void)
withCmpViewControllerConfigurationBlock((UIViewController?) -> Void)
withCmpViewConfigurationBlock((UIView) -> Void)
withUpdateGoogleConsent(([String: String]?) -> Void)
Nota: El nuevo SDK utiliza una instancia compartida (CMPManager.shared
) y un patrón de delegado para devoluciones de llamadas. Implementar CMPManagerDelegate
para el manejo de eventos.
Ejemplos de migración
rápido
// ============================================
// Previous versions
// ============================================
override func viewDidLoad({
super.viewDidLoad()
let vendoradded = NSNotification.Name.CmpConsentVendorAdded;
NotificationCenter.default.addObserver(self, selector: #selector(handleVendorAdded(notification:)), name: vendoradded, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleConsentUpdated(notification:)), name: Notification.Name.CmpConsentConsentChanged, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleVendorRemoved(notification:)), name: Notification.Name.CmpConsentVendorRemoved, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleConsentUpdated(notification:)), name: Notification.Name.CmpConsentChanged, object: nil)
setupCmpConfig();
private func setupCmpConfig() {
let cmpConfig : CmpConfig = CmpConfig.shared.setup(withId: "YOUR_CODE_ID_HERE, domain: myCmpConfig.domain, appName: myCmpConfig.appName, language: myCmpConfig.language);
cmpConfig.logLevel = CmpLogLevel.verbose;
cmpManager = CMPConsentTool(cmpConfig: cmpConfig)
.withErrorListener(onCMPError)
.withCloseListener(onClose)
.withOpenListener(onOpen)
.withOnCMPNotOpenedListener(onCMPNotOpened)
.withOnCmpButtonClickedCallback(onButtonClickedEvent)
.withCmpViewControllerConfigurationBlock { viewController in
viewController?.modalPresentationStyle = .popover
viewController?.modalTransitionStyle = .crossDissolve
}
.initialize()
}
// ============================================
// SDK v3 implementation
// ============================================
class DemoAppViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let cmpManager = CMPManager.shared
cmpManager.setUrlConfig(UrlConfig(id: "YOUR_CODE_ID_HERE", domain: "delivery.consentmanager.net", language: "IT", appName: "CMDemoAppSwift"))
cmpManager.setWebViewConfig(ConsentLayerUIConfig(
position: .fullScreen,
backgroundStyle: .dimmed(.black, 0.5),
cornerRadius: 5,
respectsSafeArea: true,
allowsOrientationChanges: true
))
cmpManager.setPresentingViewController(self)
cmpManager.delegate = self
cmpManager.checkWithServerAndOpenIfNecessary() { result in
print("CMPManager initialized and open consent layer opened if necessary")
}
}
}
// MARK: - SDK delegates - callbacks
extension DemoAppViewController: CMPManagerDelegate {
func didChangeATTStatus(oldStatus: Int, newStatus: Int, lastUpdated: Date?) {
print("DemoApp received a change in the ATTStatus")
}
func didReceiveError(error: String) {
print("DemoApp received consent layer error: \(error)")
}
func didReceiveConsent(consent: String, jsonObject: [String : Any]) {
print("DemoApp received consent.")
}
func didShowConsentLayer() {
print("DemoApp displayed Consent Layer.")
}
func didCloseConsentLayer()
print("DemoApp received close consent message.")
let homeView = HomeView()
let hostingController = UIHostingController(rootView: homeView)
self.view.window?.rootViewController = hostingController
}
}
Objective-C
// ==========================================
// Objective-C v3 implementation
// ==========================================
- (void)initializeConsentManager {
CMPManager *cmpManager = [CMPManager shared];
[cmpManager setDelegate:self];
UrlConfig *urlConfig = [[UrlConfig alloc] initWithId:@"YOUR_CODE_ID_HERE"
domain:@"delivery.consentmanager.net"
language:@"EN"
appName:@"CMDemoAppObjC"];
[cmpManager setUrlConfig:urlConfig];
ConsentLayerUIConfig *uiConfig = [[ConsentLayerUIConfig alloc] initWithPosition:PositionFullScreen
backgroundStyle:BackgroundStyleDimmed
cornerRadius:5
respectsSafeArea:YES
allowsOrientationChanges:YES];
[cmpManager setWebViewConfig:uiConfig];
[cmpManager setPresentingViewController:self];
[cmpManager checkWithServerAndOpenIfNecessary:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error initializing CMPManager: %@", error.localizedDescription);
} else {
NSLog(@"CMPManager initialized and open consent layer opened if necessary");
}
}];
}