[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.0.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: Verwenden Sie die
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
checkIfConsentIsRequired(completion:)
Methode, um automatisch zu bestimmen, ob eine Zustimmung erforderlich ist, bevor die Zustimmungsebene angezeigt wird.
Änderungen an Methoden und Signaturen
1. Initialisierung
- Old:
CMPConsentTool(cmpConfig: CmpConfig).initialize()
- Neu:
CMPManager.shared.setUrlConfig(UrlConfig)
2. UI-Konfiguration festlegen
- Old:
.withCmpViewControllerConfigurationBlock { ... }
- Neu:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
3. Zustimmungsebene prüfen und öffnen
- Old:
check({ ... }, isCached: Bool)
- Neu:
checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
4. Öffnen Sie die Zustimmungsebene
- Old:
openView()
- Neu:
openConsentLayer(completion: (Error?) -> Void)
5. Alle Einwilligungen akzeptieren
- Old:
acceptAll(onFinish: () -> Void)
- Neu:
acceptAll(completion: (Error?) -> Void)
6. Alle Einwilligungen ablehnen
- Old:
rejectAll(onFinish: () -> Void)
- Neu:
rejectAll(completion: (Error?) -> Void)
7. Zwecke aktivieren
- Old:
enablePurposeList([String], onFinish: () -> Void)
- Neu:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
8. Zwecke deaktivieren
- Old:
disablePurposeList([String], onFinish: () -> Void)
- Neu:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
9. Anbieter aktivieren
- Old:
enableVendorList([String], onFinish: () -> Void)
- Neu:
acceptVendors([String], completion: (Error?) -> Void)
10. Anbieter deaktivieren
- Old:
disableVendorList([String], onFinish: () -> Void)
- Neu:
rejectVendors([String], completion: (Error?) -> Void)
11. Alle Zwecke erfüllen
- Old:
getAllPurposes() -> String
- Neu:
getAllPurposesIDs() -> [String]
12. Aktivieren Sie die Zwecke
- Old:
getEnabledPurposes() -> String
- Neu:
getEnabledPurposesIDs() -> [String]
13. Alle Anbieter abrufen
- Old:
getAllVendors() -> String
- Neu:
getAllVendorsIDs() -> [String]
14. Holen Sie sich aktivierte Anbieter
- Old:
getEnabledVendors() -> String
- Neu:
getEnabledVendorsIDs() -> [String]
15. Zweckzustimmung prüfen
- Old:
hasPurposeConsent(String) -> Bool
- Neu:
hasPurposeConsent(id: String) -> Bool
16. Zustimmung des Anbieters prüfen
- Old:
hasVendorConsent(String) -> Bool
- Neu:
hasVendorConsent(id: String) -> Bool
17. CMP-Zeichenfolge exportieren
- Old:
exportCmpString() -> String
- Neu:
exportCMPInfo() -> String
18. CMP-Zeichenfolge importieren
- Old:
importCmpString(String, completion: (Error?) -> Void)
- Neu:
importCMPInfo(String, completion: (Error?) -> Void)
19. Einwilligungsdaten zurücksetzen
- Old:
reset()
- Neu:
resetConsentManagementData(completion: (Error?) -> Void)
Veraltete 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)
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.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");
}
}];
}