[iOS] 0. Migrationsleitfaden
Dieser Leitfaden hilft Ihnen bei der Migration von der vorherigen Version des CMP SDK zur aktuellen Version. Wir behandeln die Änderungen bei Methodennamen, Parametern und neuen oder veralteten Funktionen. Beispiele für Demo-Apps finden Sie unter diesen Link.
Bitte beachten Sie, dass diese Version des CMP SDK von Grund auf neu erstellt wurde und daher eine Wichtige bahnbrechende Änderungen, da alle Methoden umbenannt wurden, ebenso wie die Signaturen, und jetzt auch Rückrufe für fast alle Methoden angeboten werden. Auf alle Fällemüssen Sie Ihren Code ändern und Ihre Abhängigkeiten aktualisieren, um sicherzustellen, dass Ihre mobile App wie erwartet funktioniert. Darüber hinaus ist zu erwähnen, dass Alle Daten, die von der vorherigen Version unseres SDK auf den Geräten der Benutzer gespeichert wurden, werden gelöscht., wodurch die App gezwungen wird, Erneutes Anzeigen der Einwilligungsebene.
Aufbewahrungsorte
Bitte beachten Sie, dass sich alle unsere Repositories für das iOS SDK geändert haben. Befolgen Sie die nachstehenden Anweisungen, um herauszufinden, wohin Sie Ihren Abhängigkeitsmanager verweisen müssen.
Beachten Sie auch, dass wir keine statische Version bereitstellen unseres benutzerdefinierten Frameworks.
Kakaofrucht
Ersetzen Sie in Ihrem Podfile die vorherige Zeile durch die folgende:
pod 'cm-sdk-ios-v3, '3.2.0'
Führen Sie nach der Änderung Folgendes in der Befehlszeile aus:
pod install --repo-update
Swift-Paket-Manager
Unser XCFramework-Paket wird jetzt gehostet auf https://github.com/iubenda/cm-sdk-xcframework-v3.
Gehen Sie in XCode zum Menü „Datei“ > „Paketabhängigkeiten hinzufügen“ und verweisen Sie auf die obige URL.
Wichtige Migrationspunkte
-
Delegiertenmuster: Anstelle einzelner Listener verwendet die neue Version ein einzelnes Delegate-Protokoll (
CMPManagerDelegate
) zur Behandlung von Ereignissen. Es enthält 4 Hauptereignisse:-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Dies wird ausgelöst, wenn die Zustimmungsebene geschlossen wurde, nachdem der Benutzer seine Zustimmungen aktualisiert hatte, ODER wenn Methoden aufgerufen werden, die Änderungen an den Zustimmungen bewirken, wie „acceptAll“, „rejectAll“, „acceptVendors“, „rejectVendors“ usw. Dies bedeutet, dass der Benutzer einige oder alle Zustimmungen akzeptiert oder abgelehnt hat und dass diese korrekt auf dem Gerät gespeichert wurden. -
didShowConsentLayer
Dies wird ausgelöst, wenn die Zustimmungsebene tatsächlich angezeigt wurde. Es bedeutet, dass auf dem Gerät keine gültige Zustimmung vorhanden war und daher eine neue eingeholt werden muss. -
didCloseConsentLayer
Dies wird ausgelöst, wenn das SDK die Notwendigkeit einer Zustimmung überprüft hat, diese aber nicht erforderlich war und die Ebene nicht angezeigt wurde. Das bedeutet, dass bereits eine gültige Zustimmung im Gerät vorhanden ist, sodass keine neue Zustimmung erforderlich ist und die Zustimmungsebene nicht angezeigt wird. -
didReceiveError
Dies wird ausgelöst, wenn der SDK-Vorgang einen Fehler verursacht hat.
-
- Vervollständigungshandler: Viele Methoden enthalten jetzt Abschlusshandler für asynchrone Vorgänge. Aktualisieren Sie Ihren Code, um diese Rückrufe entsprechend zu verarbeiten.
-
Zustimmungszeichenfolge: Wasser
exportCMPInfo()
stattgetConsentString()
um die Einwilligungsinformationen abzurufen. - Einwilligungen von Anbietern und Zwecken: Die Methoden zum Einholen von Anbieter- und Zweckzustimmungen geben jetzt ID-Arrays zurück. Möglicherweise müssen Sie Ihre Logik anpassen, um diese Arrays verarbeiten zu können.
-
US-Datenschutzzeichenfolge: Die
getUSPrivacyString()
Methode ist veraltet. Wenn Sie dies zur Einhaltung des CCPA verwendet haben, beachten Sie bitte, dass diese Methode nicht mehr verfügbar ist. -
Einwilligungspflichtprüfung: Verwenden Sie das Neue
checkAndOpen(completion:)
Methode, um automatisch zu bestimmen, ob die Zustimmungsebene angezeigt werden muss.
Änderungen an Methoden und Signaturen
Initialisierung
- Old:
CMPConsentTool(cmpConfig: CmpConfig).initialize()
- Neu:
CMPManager.shared.setUrlConfig(UrlConfig)
UI-Konfiguration festlegen
- Old:
.withCmpViewControllerConfigurationBlock { ... }
- Neu:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
Zustimmungsebene prüfen und öffnen
- Old:
check({ ... }, isCached: Bool)
- Neu:
checkAndOpen(completion: (Error?) -> Void)
Öffnen Sie die Einwilligungsebene
- Old:
openView()
- Neu:
forceOpen(completion: (Error?) -> Void)
Alle Einwilligungen akzeptieren
- Old:
acceptAll(onFinish: () -> Void)
- Neu:
acceptAll(completion: (Error?) -> Void)
Alle Zustimmungen ablehnen
- Old:
rejectAll(onFinish: () -> Void)
- Neu:
rejectAll(completion: (Error?) -> Void)
Zwecke aktivieren
- Old:
enablePurposeList([String], onFinish: () -> Void)
- Neu:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
Zwecke deaktivieren
- Old:
disablePurposeList([String], onFinish: () -> Void)
- Neu:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
Anbieter aktivieren
- Old:
enableVendorList([String], onFinish: () -> Void)
- Neu:
acceptVendors([String], completion: (Error?) -> Void)
Anbieter deaktivieren
- Old:
disableVendorList([String], onFinish: () -> Void)
- Neu:
rejectVendors([String], completion: (Error?) -> Void)
Holen Sie sich alle Zwecke
- Old:
getAllPurposes() -> String
- Neu:
getUserStatus() -> [CMPUserStatusResponse]
Aktivieren Sie die Zwecke
- Old:
getEnabledPurposes() -> String
- Neu:
getUserStatus() -> [CMPUserStatusResponse]
Alle Anbieter abrufen
- Old:
getAllVendors() -> String
- Neu:
getUserStatus() -> [CMPUserStatusResponse]
Aktivierte Anbieter erhalten
- Old:
getEnabledVendors() -> String
- Neu:
getUserStatus() -> [CMPUserStatusResponse]
Zweckzustimmung prüfen
- Old:
hasPurposeConsent(String) -> Bool
- Neu:
getStatusForPurpose(id: String) -> [UniqueConsentStatus]
Zustimmung des Anbieters prüfen
- Old:
hasVendorConsent(String) -> Bool
- Neu:
getStatusForVendor(id: String) -> [UniqueConsentStatus]
CMP-Zeichenfolge exportieren
- Old:
exportCmpString() -> String
- Neu:
exportCMPInfo() -> String
CMP-Zeichenfolge importieren
- Old:
importCmpString(String, completion: (Error?) -> Void)
- Neu:
importCMPInfo(String, completion: (Error?) -> Void)
Einwilligungsdaten zurücksetzen
- Old:
reset()
- Neu:
resetConsentManagementData(completion: (Error?) -> Void)
Umgang mit dem Google Consent Mode-Status
- Old:
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface)
- Neu:
getGoogleConsentModeStatus
Umgang mit dem onLinkClick-Rückruf
- Alt: Version 2 verfügte über eine Whitelist-Funktion. In der aktuellen Version wurde der Prozess vereinfacht, und der Benutzer hat die volle Kontrolle über das Verhalten, das gemäß der von der Methode zurückgegebenen URL ausgeführt 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 Benutzer hat die volle Kontrolle darüber, welches Verhalten je nach URL angewendet wird. Daher sollten die zuvor auf der Whitelist stehenden URLs 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() -> Bool
isConsentRequired() -> Bool
getUSPrivacyString() -> String
withCloseListener(() -> 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 Rückrufe. Implementieren CMPManagerDelegate
zur Behandlung von Ereignissen.
Migrationsbeispiele
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");
}
}];
}