Info
Innehåll

[iOS] 0. Migrationsguide

Den här guiden hjälper dig att migrera från den tidigare versionen av CMP SDK till den nuvarande versionen. Vi kommer att täcka ändringar i metodnamn, parametrar och ny eller föråldrad funktionalitet. För exempel på demoappar, kolla denna länk

Var medveten om att den här versionen av CMP SDK byggdes om helt från grunden, och därför representerar den en stor brytande förändring, eftersom alla metoder döptes om, liksom signaturerna, och erbjuder nu återuppringningar till nästan alla metoder. I samtliga fallmåste du ändra din kod och uppdatera dina beroenden för att säkerställa att din mobilapp fungerar som förväntat. Vi också råder dig starkt för att be dina användare att avinstallera och installera om din mobilapp, för att undvika problem med data som finns kvar på enheten.

arkiv

Observera att alla våra arkiv har ändrats för iOS SDK. Följ instruktionerna nedan för att ta reda på var du ska peka din beroendehanterare. 

Lägg också märke till att vi tillhandahåll inte en statisk version av vårt anpassade ramverk.

kokopod

På din Podfile, ersätt den föregående raden med den nedan:

pod 'cm-sdk-ios-v3, '3.0.0'

Efter att ha ändrat, kör detta på kommandoraden:

pod install --repo-update
Swift Package Manager

Vårt XCFramework-paket finns nu på https://github.com/iubenda/cm-sdk-xcframework-v3.

På XCode, gå till menyn Arkiv > Lägg till paketberoende och peka på webbadressen ovan.  

Viktiga migrationspunkter

  1. Delegatmönster: Istället för enskilda lyssnare använder den nya versionen ett enda delegatprotokoll (CMPManagerDelegate) för att hantera händelser. Den innehåller 4 huvudhändelser:
    1. didReceiveConsent(consent: String, jsonObject: [String : Any])
      Detta utlöses när samtyckeslagret stängdes efter att användaren uppdaterat sina samtycken ELLER när man åberopar metoder som orsakar ändringar i samtyckena, som acceptAll, rejectAll, acceptVendors, rejectVendors, etc. Det betyder att användaren accepterade eller avvisade några av alla. av samtyckena och att dessa sparades korrekt i enheten.
    2. didShowConsentLayer
      Detta utlöses när samtyckeslagret faktiskt visades. Det betyder att det inte fanns ett giltigt samtycke i enheten, så ett nytt bör hämtas.
    3. didCloseConsentLayer
      Detta utlöses när SDK:n kontrollerade behovet av ett samtycke, men det behövdes inte och lagret visades inte. Det betyder att det redan finns en giltig i enheten, så en ny är inte nödvändig och tue samtyckeslager kommer inte att visas.
    4. didReceiveError
      Detta utlöses när SDK-operationen har orsakat något fel.
  2. Kompletteringshanterare: Många metoder inkluderar nu kompletteringshanterare för asynkrona operationer. Uppdatera din kod för att hantera dessa återuppringningar på rätt sätt.
  3. Samtyckessträng: Använda exportCMPInfo() istället för getConsentString() för att hämta samtyckesinformationen.
  4. Säljarens samtycke: Metoderna för att få tillstånd från leverantörer och ändamål returnerar nu arrayer av ID:n. Du kan behöva justera din logik för att hantera dessa arrayer.
  5. USA:s sekretesssträng: Smakämnen getUSPrivacyString() metoden har fasats ut. Om du använde detta för CCPA-efterlevnad, observera att den här metoden inte är tillgänglig längre.
  6. Kontroll av samtyckeskrav: Använd det nya checkIfConsentIsRequired(completion:) metod för att automatiskt avgöra om samtycke behövs innan samtyckesskiktet visas.

Metoder och signaturer ändras

1. initiering
  • Old: CMPConsentTool(cmpConfig: CmpConfig).initialize()
  • Ny: CMPManager.shared.setUrlConfig(UrlConfig)
2. Ställ in UI-konfiguration
  • Old: .withCmpViewControllerConfigurationBlock { ... }
  • Ny: CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
3. Markera och öppna samtyckeslager
  • Old: check({ ... }, isCached: Bool)
  • Ny: checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
  • Old: openView()
  • Ny: openConsentLayer(completion: (Error?) -> Void)
5. Acceptera alla samtycken
  • Old: acceptAll(onFinish: () -> Void)
  • Ny: acceptAll(completion: (Error?) -> Void)
6. Avvisa alla samtycken
  • Old: rejectAll(onFinish: () -> Void)
  • Ny: rejectAll(completion: (Error?) -> Void)
7. Aktivera syften
  • Old: enablePurposeList([String], onFinish: () -> Void)
  • Ny: acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
8. Inaktivera syften
  • Old: disablePurposeList([String], onFinish: () -> Void)
  • Ny: rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
9. Aktivera leverantörer
  • Old: enableVendorList([String], onFinish: () -> Void)
  • Ny: acceptVendors([String], completion: (Error?) -> Void)
10. Inaktivera leverantörer
  • Old: disableVendorList([String], onFinish: () -> Void)
  • Ny: rejectVendors([String], completion: (Error?) -> Void)
11. Få alla ändamål
  • Old: getAllPurposes() -> String
  • Ny: getAllPurposesIDs() -> [String]
12. Aktivera syften
  • Old: getEnabledPurposes() -> String
  • Ny: getEnabledPurposesIDs() -> [String]
13. Skaffa alla leverantörer
  • Old: getAllVendors() -> String
  • Ny: getAllVendorsIDs() -> [String]
14. Skaffa aktiverade leverantörer
  • Old: getEnabledVendors() -> String
  • Ny: getEnabledVendorsIDs() -> [String]
15. Markera syftessamtycke
  • Old: hasPurposeConsent(String) -> Bool
  • Ny: hasPurposeConsent(id: String) -> Bool
16. Markera leverantörens samtycke
  • Old: hasVendorConsent(String) -> Bool
  • Ny: hasVendorConsent(id: String) -> Bool
17. Exportera CMP-sträng
  • Old: exportCmpString() -> String
  • Ny: exportCMPInfo() -> String
18. Importera CMP-sträng
  • Old: importCmpString(String, completion: (Error?) -> Void)
  • Ny: importCMPInfo(String, completion: (Error?) -> Void)
  • Old: reset()
  • Ny: resetConsentManagementData(completion: (Error?) -> Void)

Föråldrade metoder:

  • 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)

Notera: Den nya SDK:n använder en delad instans (CMPManager.shared) och ett delegatmönster för återuppringningar. Genomföra CMPManagerDelegate för att hantera evenemang.

Migrationsexempel

Snabb

// ============================================
// 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");
        }
    }];
}
Tillbaka till toppen