Info
Contenido

[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

  1. 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:
    1. 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.
    2. 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.
    3. 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á.
    4. didReceiveError
      Esto se activa cuando la operación del SDK ha generado algún error.
  2. 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.
  3. Cadena de consentimiento: Usa exportCMPInfo() en lugar de getConsentString() para recuperar la información del consentimiento.
  4. 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.
  5. 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.
  6. 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)
  • 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)
  • 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");
        }
    }];
}
Volver