Dieser Leitfaden hilft Ihnen bei der Migration von der vorherigen Version des CMP-SDK zur aktuellen Version. Wir behandeln die Änderungen bei Methodennamen, Parametern sowie neuen oder veralteten Funktionen. Beispiele für Demo-Apps finden Sie unter diesem Link.
Bitte beachten Sie, dass diese Version des CMP-SDK komplett neu entwickelt wurde und somit eine wesentliche Änderung darstellt, da alle Methoden umbenannt wurden, ebenso wie die Signaturen, und nun Callbacks für fast alle Methoden angeboten werden. In jedem Fall müssen Sie Ihren Code anpassen und Ihre Abhängigkeiten aktualisieren, um sicherzustellen, dass Ihre mobile App wie erwartet funktioniert. Darüber hinaus ist zu beachten, dass alle Daten, die von der vorherigen Version unseres SDK auf den Geräten der Nutzer gespeichert wurden, gelöscht werden, was die App dazu zwingt, die Einwilligungsseite erneut anzuzeigen.
Repositorien
Bitte beachten Sie, dass sich alle unsere Repositorys für das iOS SDK geändert haben. Befolgen Sie die nachstehenden Anweisungen, um herauszufinden, wohin Sie Ihren Dependency Manager verweisen müssen.
Weitere Informationen finden Sie in unserer API-Referenzdokumentation. Alle folgenden Codeausschnitte stammen aus unserer Demo-App.
Beachten Sie außerdem, dass wir keine statische Version unseres benutzerdefinierten Frameworks bereitstellen.
Cocoapod
Ersetze in deiner Podfile-Datei die vorherige Zeile durch die folgende:
pod 'cm-sdk-ios-v3, '3.8.0'
Führen Sie nach der Änderung folgenden Befehl in der Befehlszeile aus:
pod install --repo-update
Swift Package Manager
Unser XCFramework-Paket wird nun auf https://github.com/iubenda/cm-sdk-xcframework-v3 gehostet.
Gehen Sie in XCode zum Menü „Datei“ > „Paketabhängigkeiten hinzufügen“ und geben Sie die oben genannte URL ein.
Wichtige Punkte bei der Migration
-
Delegate-Muster: Anstelle einzelner Listener verwendet die neue Version ein einziges Delegate-Protokoll (
CMPManagerDelegate) zur Verarbeitung von Ereignissen. Es enthält 4 Hauptereignisse:-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Dies wird ausgelöst, wenn die Einwilligungsschicht geschlossen wurde, nachdem der Nutzer seine Einwilligungen aktualisiert hat, ODER beim Aufruf von Methoden, die Änderungen an den Einwilligungen bewirken, wie acceptAll, rejectAll, acceptVendors, rejectVendors usw. Das bedeutet, dass der Nutzer einige oder alle Einwilligungen akzeptiert oder abgelehnt hat und dass diese korrekt auf dem Gerät gespeichert wurden. -
didShowConsentLayer
Dies wird ausgelöst, wenn die Einwilligungsschicht tatsächlich angezeigt wurde. Das bedeutet, dass auf dem Gerät keine gültige Einwilligung vorhanden war, sodass eine neue eingeholt werden sollte. -
didCloseConsentLayer
Dies wird ausgelöst, wenn das SDK die Notwendigkeit einer Einwilligung geprüft hat, diese jedoch nicht erforderlich war und die Einwilligungsschicht nicht angezeigt wurde. Das bedeutet, dass bereits eine gültige Einwilligung auf dem Gerät vorhanden ist, sodass keine neue erforderlich ist und die Einwilligungsschicht nicht angezeigt wird. -
didReceiveError
Dies wird ausgelöst, wenn der SDK-Vorgang einen Fehler ausgelöst hat.
-
- Abschluss-Handler: Viele Methoden enthalten nun Abschluss-Handler für asynchrone Operationen. Aktualisieren Sie Ihren Code, um diese Callbacks entsprechend zu verarbeiten.
-
Einwilligungstext: Verwenden Sie
exportCMPInfo()anstelle vongetConsentString(), um die Einwilligungsinformationen abzurufen. - Einwilligungen zu Anbietern und Zwecken: Die Methoden zum Einholen von Einwilligungen zu Anbietern und Zwecken geben nun Arrays von IDs zurück. Möglicherweise müssen Sie Ihre Logik anpassen, um diese Arrays zu verarbeiten.
-
US-Datenschutz-String: Die
getUSPrivacyString()Methode wurde als veraltet markiert. Falls Sie diese zur Einhaltung der CCPA-Vorschriften verwendet haben, beachten Sie bitte, dass diese Methode nicht mehr verfügbar ist. -
Prüfung der Einwilligungsanforderungen: Verwenden Sie die neue
checkAndOpen(completion:)Methode, um automatisch festzustellen, ob die Einwilligungsschicht angezeigt werden muss.
Änderungen bei Methoden und Signaturen
Initialisierung
- Alt:
CMPConsentTool(cmpConfig: CmpConfig).initialize() - Neu:
CMPManager.shared.setUrlConfig(UrlConfig)CMPManager.shared.setPresentingViewController- Delegieren
UI-Konfiguration festlegen
- Alt:
.withCmpViewControllerConfigurationBlock { ... } - Neu:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
Überprüfen und Öffnen der Einwilligungsschicht
- Alt:
check({ ... }, isCached: Bool) - Neu:
checkAndOpen(completion: (Error?) -> Void)
Open Consent Layer
- Alt:
openView() - Neu:
forceOpen(completion: (Error?) -> Void)
Alle Einwilligungen akzeptieren
- Alt:
acceptAll(onFinish: () -> Void) - Neu:
acceptAll(completion: (Error?) -> Void)
Alle Einwilligungen ablehnen
- Alt:
rejectAll(onFinish: () -> Void) - Neu:
rejectAll(completion: (Error?) -> Void)
Zwecke aktivieren
- Alt:
enablePurposeList([String], onFinish: () -> Void) - Neu:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
Zweck deaktivieren
- Alt:
disablePurposeList([String], onFinish: () -> Void) - Neu:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
Anbieter aktivieren
- Alt:
enableVendorList([String], onFinish: () -> Void) - Neu:
acceptVendors([String], completion: (Error?) -> Void)
Anbieter deaktivieren
- Alt:
disableVendorList([String], onFinish: () -> Void) - Neu:
rejectVendors([String], completion: (Error?) -> Void)
Für alle Zwecke
- Alt:
getAllPurposes() -> String - Neu:
getUserStatus() -> [CMPUserStatusResponse]
Get Enabled Purposes
- Alt:
getEnabledPurposes() -> String - Neu:
getUserStatus() -> [CMPUserStatusResponse]
Alle Anbieter anzeigen
- Alt:
getAllVendors() -> String - Neu:
getUserStatus() -> [CMPUserStatusResponse]
Zugelassene Anbieter
- Alt:
getEnabledVendors() -> String - Neu:
getUserStatus() -> [CMPUserStatusResponse]
Zweck der Einwilligung prüfen
- Alt:
hasPurposeConsent(String) -> Bool - Neu:
getStatusForPurpose(id: String) -> [UniqueConsentStatus]
Zustimmung des Anbieters prüfen
- Alt:
hasVendorConsent(String) -> Bool - Neu:
getStatusForVendor(id: String) -> [UniqueConsentStatus]
CMP-String exportieren
- Alt:
exportCmpString() -> String - Neu:
exportCMPInfo() -> String
CMP-String importieren
- Alt:
importCmpString(String, completion: (Error?) -> Void) - Neu:
importCMPInfo(String, completion: (Error?) -> Void)
Einwilligungsdaten zurücksetzen
- Alt:
reset() - Neu:
resetConsentManagementData(completion: (Error?) -> Void)
Umgang mit dem Status des Google-Einwilligungsmodus
- Alt:
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface) - Neu:
getGoogleConsentModeStatus
Umgang mit dem onLinkClick-Callback
- Alt: In Version 2 gab es früher eine Whitelist-Funktion. In der aktuellen Version wurde der Prozess vereinfacht, und der Benutzer hat die volle Kontrolle über das zu befolgende Verhalten entsprechend der URL, die von der Methode zurückgegeben wird.
cmpConfig.domainWhitelist = ["add your domains to be whitelisted"]
cmpManager.withOnCmpLinkClickListener({ url, decisionHandler in
//check URL and add the nav action
decisionHandler!.pointee = WKNavigationActionPolicy.allow
decisionHandler!.pointee = WKNavigationActionPolicy.cancel
// return shouldCloseWebView (true) or stay open (false)
return true
})
- Neu: Der Nutzer hat die volle Kontrolle darüber, welchem Verhalten er entsprechend der URL folgen möchte. Daher sollten die bisherigen URLs auf der Whitelist in die Callback-Methode migriert werden,
cmpManager.setLinkClickHandler { url in
// Handle links to specific domains externally. The user has full control over which behavior to follow
// according to the URL. The previous whitelisted URL's should be migrated to inside the callback method,
// and the user has the choice to use a switch-case statement, pattern matching, etc.
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
}
Veraltete Methoden:
checkIfConsentIsRequired(completion: @escaping (Bool) -> Void)-
hasUserChoice() -> Bool -
hasPurposeConsent(id: String) -> Bool -
hasVendorConsent(id: String) -> Bool -
openConsentLayer(completion: @escaping (NSError?) -> Void) -
getAllPurposesIDs() -> [String] -
getEnabledPurposesIDs() -> [String] -
getDisabledPurposesIDs() -> [String] -
getAllVendorsIDs() -> [String] -
getEnabledVendorsIDs() -> [String] -
getDisabledVendorsIDs() -> [String] consentRequestedToday() -> BoolisConsentRequired() -> BoolgetUSPrivacyString() -> StringwithCloseListener(() -> Void)withOpenListener(() -> Void)withErrorListener((CmpErrorType, String?) -> Void)withOnCMPNotOpenedListener(() -> Void)withOnCmpButtonClickedCallback((CmpButtonEvent) -> Void)withCmpViewControllerConfigurationBlock((UIViewController?) -> Void)withCmpViewConfigurationBlock((UIView) -> Void)withUpdateGoogleConsent(([String: String]?) -> Void
Hinweis: Das neue SDK verwendet eine gemeinsam genutzte Instanz (CMPManager.shared) und ein Delegate-Muster für Callbacks. Implementiere CMPManagerDelegate zur Verarbeitung von Ereignissen.
Beispiele für die Migration
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.checkAndOpen() { 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 checkAndOpen:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error initializing CMPManager: %@", error.localizedDescription);
} else {
NSLog(@"CMPManager initialized and open consent layer opened if necessary");
}
}];
}