informatie
Content

[iOS] 0. Migratiegids

Deze gids helpt u bij het migreren van de vorige versie van de CMP SDK naar de huidige versie. We behandelen de wijzigingen in methodenamen, parameters en nieuwe of verouderde functionaliteit. Voor voorbeelden van demo-apps, kijk deze link

Houd er rekening mee dat deze versie van de CMP SDK volledig opnieuw is opgebouwd en daarom een grote ingrijpende verandering, aangezien alle methoden een nieuwe naam kregen, evenals de handtekeningen, en nu callbacks voor bijna alle methoden worden aangeboden. In alle gevallen, moet u uw code aanpassen en uw afhankelijkheden bijwerken om ervoor te zorgen dat uw mobiele app werkt zoals verwacht. Bovendien is het vermeldenswaard dat alle gegevens die door de vorige versie van onze SDK op de apparaten van de gebruikers zijn opgeslagen, worden gewist, wat de app zal dwingen om de toestemmingslaag opnieuw weergeven.

Vindplaatsen

Houd er rekening mee dat al onze repositories zijn gewijzigd voor de iOS SDK. Volg de onderstaande instructies om erachter te komen waar u uw dependency manager naartoe moet verwijzen. 

Merk ook op dat wij geef geen statische versie van ons aangepaste raamwerk.

Cacaopod

Vervang in uw Podfile de vorige regel door de onderstaande regel:

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

Nadat u de wijzigingen hebt doorgevoerd, voert u het volgende uit op de opdrachtregel:

pod install --repo-update
Swift-pakketbeheerder

Ons XCFramework-pakket wordt nu gehost op https://github.com/iubenda/cm-sdk-xcframework-v3.

Ga in XCode naar het menu Bestand > Pakketafhankelijk toevoegen en verwijs naar de bovenstaande URL.  

Belangrijkste migratiepunten

  1. Delegatiepatroon: In plaats van individuele luisteraars gebruikt de nieuwe versie een enkel gedelegeerd protocol (CMPManagerDelegate) voor het afhandelen van gebeurtenissen. Het bevat 4 hoofdgebeurtenissen:
    1. didReceiveConsent(consent: String, jsonObject: [String : Any])
      Dit wordt geactiveerd wanneer de toestemmingslaag is gesloten nadat de gebruiker zijn/haar toestemmingen heeft bijgewerkt OF wanneer methoden worden aangeroepen die wijzigingen in de toestemmingen veroorzaken, zoals acceptAll, rejectAll, acceptVendors, rejectVendors, enz. Dit betekent dat de gebruiker een deel van alle toestemmingen heeft geaccepteerd of afgewezen en dat deze correct zijn opgeslagen op het apparaat.
    2. didShowConsentLayer
      Dit wordt geactiveerd wanneer de toestemmingslaag daadwerkelijk is weergegeven. Het betekent dat er geen toestemming geldig was in het apparaat, dus er moet een nieuwe worden verzameld.
    3. didCloseConsentLayer
      Dit wordt geactiveerd wanneer de SDK de noodzaak van een toestemming heeft gecontroleerd, maar deze niet nodig was en de laag niet werd weergegeven. Dit betekent dat er al een geldige in het apparaat is, dus een nieuwe is niet nodig en de toestemmingslaag wordt niet weergegeven.
    4. didReceiveError
      Dit wordt geactiveerd wanneer de SDK-bewerking een fout heeft gegenereerd.
  2. Voltooiingshandlers: Veel methoden bevatten nu completion handlers voor asynchrone bewerkingen. Werk uw code bij om deze callbacks op de juiste manier te verwerken.
  3. Toestemmingsstring: Te gebruiken exportCMPInfo() in plaats van getConsentString() om de toestemmingsinformatie op te halen.
  4. Toestemmingen van leveranciers en doeleinden: De methoden om toestemmingen van leveranciers en doelen te verkrijgen, retourneren nu arrays van ID's. Mogelijk moet u uw logica aanpassen om deze arrays te verwerken.
  5. Amerikaanse privacystring: De getUSPrivacyString() methode is verouderd. Als u deze gebruikte voor CCPA-naleving, houd er dan rekening mee dat deze methode niet meer beschikbaar is.
  6. Controle op toestemmingsvereiste: Gebruik de nieuwe checkIfConsentIsRequired(completion:) Methode om automatisch te bepalen of toestemming nodig is voordat de toestemmingslaag wordt weergegeven.

Wijzigingen in methoden en handtekeningen

1. Initialisatie
  • Oud: CMPConsentTool(cmpConfig: CmpConfig).initialize()
  • Nieuw: CMPManager.shared.setUrlConfig(UrlConfig)
2. UI-configuratie instellen
  • Oud: .withCmpViewControllerConfigurationBlock { ... }
  • Nieuw: CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
3. Controleer en open de toestemmingslaag
  • Oud: check({ ... }, isCached: Bool)
  • Nieuw: checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
  • Oud: openView()
  • Nieuw: openConsentLayer(completion: (Error?) -> Void)
5. Accepteer alle toestemmingen
  • Oud: acceptAll(onFinish: () -> Void)
  • Nieuw: acceptAll(completion: (Error?) -> Void)
6. Alle toestemmingen afwijzen
  • Oud: rejectAll(onFinish: () -> Void)
  • Nieuw: rejectAll(completion: (Error?) -> Void)
7. Doeleinden inschakelen
  • Oud: enablePurposeList([String], onFinish: () -> Void)
  • Nieuw: acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
8. Doeleinden uitschakelen
  • Oud: disablePurposeList([String], onFinish: () -> Void)
  • Nieuw: rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
9. Leveranciers inschakelen
  • Oud: enableVendorList([String], onFinish: () -> Void)
  • Nieuw: acceptVendors([String], completion: (Error?) -> Void)
10. Leveranciers uitschakelen
  • Oud: disableVendorList([String], onFinish: () -> Void)
  • Nieuw: rejectVendors([String], completion: (Error?) -> Void)
11. Krijg alle doeleinden
  • Oud: getAllPurposes() -> String
  • Nieuw: getAllPurposesIDs() -> [String]
12. Doeleinden inschakelen
  • Oud: getEnabledPurposes() -> String
  • Nieuw: getEnabledPurposesIDs() -> [String]
13. Verzamel alle leveranciers
  • Oud: getAllVendors() -> String
  • Nieuw: getAllVendorsIDs() -> [String]
14. Krijg ingeschakelde leveranciers
  • Oud: getEnabledVendors() -> String
  • Nieuw: getEnabledVendorsIDs() -> [String]
15. Controleer het doel van de toestemming
  • Oud: hasPurposeConsent(String) -> Bool
  • Nieuw: hasPurposeConsent(id: String) -> Bool
16. Controleer de toestemming van de leverancier
  • Oud: hasVendorConsent(String) -> Bool
  • Nieuw: hasVendorConsent(id: String) -> Bool
17. Exporteer CMP-string
  • Oud: exportCmpString() -> String
  • Nieuw: exportCMPInfo() -> String
18. Importeer CMP-string
  • Oud: importCmpString(String, completion: (Error?) -> Void)
  • Nieuw: importCMPInfo(String, completion: (Error?) -> Void)
  • Oud: reset()
  • Nieuw: resetConsentManagementData(completion: (Error?) -> Void)

Verouderde methoden:

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

Opmerking: De nieuwe SDK gebruikt een gedeeld exemplaar (CMPManager.shared) en een gedelegeerd patroon voor callbacks. Implementeren CMPManagerDelegate voor het afhandelen van evenementen.

Migratievoorbeelden

Swift

// ============================================
// 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
    }
}

Doelstelling 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");
        }
    }];
}
Terug naar boven