[iOS] 0. Przewodnik migracji
Ten przewodnik pomoże Ci przeprowadzić migrację z poprzedniej wersji CMP SDK do obecnej wersji. Omówimy zmiany w nazwach metod, parametrach i nowych lub wycofanych funkcjach. Przykłady aplikacji demonstracyjnych znajdziesz tutaj pod tym linkiem.
Należy pamiętać, że ta wersja pakietu CMP SDK została całkowicie przebudowana od podstaw, dlatego stanowi ona istotna zmiana, ponieważ zmieniono nazwy wszystkich metod, zmieniono nazwy sygnatur, a teraz można też skorzystać z wywołań zwrotnych do niemal wszystkich metod. We wszystkich przypadkach, musisz zmodyfikować swój kod i zaktualizować zależności, aby upewnić się, że Twoja aplikacja mobilna działa zgodnie z oczekiwaniami. Warto również wspomnieć, że wszystkie dane zapisane przez poprzednią wersję naszego SDK na urządzeniach użytkowników zostaną usunięte, co zmusi aplikację do ponownie wyświetl warstwę zgody.
Repozytoria
Należy pamiętać, że wszystkie nasze repozytoria zostały zmienione dla iOS SDK. Postępuj zgodnie z poniższymi instrukcjami, aby dowiedzieć się, gdzie skierować swojego menedżera zależności.
Zauważ również, że nie udostępniaj wersji statycznej naszego niestandardowego frameworka.
kakopod
W pliku Podfile zamień poprzedni wiersz na poniższy:
pod 'cm-sdk-ios-v3, '3.0.0'
Po dokonaniu zmiany uruchom to w wierszu poleceń:
pod install --repo-update
Menedżer pakietów Swift
Nasz pakiet XCFramework jest teraz hostowany na https://github.com/iubenda/cm-sdk-xcframework-v3.
W XCode przejdź do menu Plik > Dodaj pakiet zależny i wskaż powyższy adres URL.
Kluczowe punkty migracji
-
Wzór delegata: Zamiast pojedynczych słuchaczy nowa wersja wykorzystuje pojedynczy protokół delegata (
CMPManagerDelegate
) do obsługi zdarzeń. Zawiera 4 główne zdarzenia:-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Wyzwala się, gdy warstwa zgody została zamknięta po zaktualizowaniu przez użytkownika swoich zgód LUB podczas wywołania metod powodujących zmiany w zgodach, takich jak acceptAll, rejectAll, acceptVendors, rejectVendors itd. Oznacza to, że użytkownik zaakceptował lub odrzucił część lub wszystkie zgody, a także że zostały one prawidłowo zapisane na urządzeniu. -
didShowConsentLayer
Wyzwala się, gdy warstwa zgody została faktycznie wyświetlona. Oznacza to, że w urządzeniu nie było ważnej zgody, więc należy zebrać nową. -
didCloseConsentLayer
Wyzwalane jest, gdy SDK sprawdza potrzebę zgody, ale nie była ona potrzebna i warstwa nie była wyświetlana. Oznacza to, że w urządzeniu jest już prawidłowa, więc nowa nie jest konieczna i warstwa zgody nie zostanie wyświetlona. -
didReceiveError
Wyzwalane jest to w przypadku, gdy operacja SDK zgłosi błąd.
-
- Osoby odpowiedzialne za realizację: Wiele metod obejmuje teraz obsługę ukończenia dla operacji asynchronicznych. Zaktualizuj swój kod, aby odpowiednio obsługiwać te wywołania zwrotne.
-
Ciąg zgody: Zastosowanie
exportCMPInfo()
zamiastgetConsentString()
aby pobrać informacje o zgodzie. - Zgody na dostawcę i cel: Metody uzyskiwania zgód dostawcy i celu zwracają teraz tablice identyfikatorów. Może być konieczne dostosowanie logiki do obsługi tych tablic.
-
Łańcuch prywatności w USA: Kurs
getUSPrivacyString()
metoda została wycofana. Jeśli używałeś jej w celu zachowania zgodności z CCPA, pamiętaj, że ta metoda nie jest już dostępna. -
Weryfikacja wymogu zgody: Użyj nowego
checkIfConsentIsRequired(completion:)
metoda automatycznego określania, czy zgoda jest wymagana przed wyświetleniem warstwy zgody.
Zmiany metod i podpisów
1. Inicjalizacja
- Stary:
CMPConsentTool(cmpConfig: CmpConfig).initialize()
- Nowość:
CMPManager.shared.setUrlConfig(UrlConfig)
2. Ustaw konfigurację interfejsu użytkownika
- Stary:
.withCmpViewControllerConfigurationBlock { ... }
- Nowość:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
3. Sprawdź i otwórz warstwę zgody
- Stary:
check({ ... }, isCached: Bool)
- Nowość:
checkWithServerAndOpenIfNecessary(completion: (Error?) -> Void)
4. Otwórz warstwę zgody
- Stary:
openView()
- Nowość:
openConsentLayer(completion: (Error?) -> Void)
5. Zaakceptuj wszystkie zgody
- Stary:
acceptAll(onFinish: () -> Void)
- Nowość:
acceptAll(completion: (Error?) -> Void)
6. Odrzuć wszystkie zgody
- Stary:
rejectAll(onFinish: () -> Void)
- Nowość:
rejectAll(completion: (Error?) -> Void)
7. Włącz cele
- Stary:
enablePurposeList([String], onFinish: () -> Void)
- Nowość:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
8. Wyłącz cele
- Stary:
disablePurposeList([String], onFinish: () -> Void)
- Nowość:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
9. Włącz dostawców
- Stary:
enableVendorList([String], onFinish: () -> Void)
- Nowość:
acceptVendors([String], completion: (Error?) -> Void)
10. Wyłącz dostawców
- Stary:
disableVendorList([String], onFinish: () -> Void)
- Nowość:
rejectVendors([String], completion: (Error?) -> Void)
11. Zdobądź wszystko
- Stary:
getAllPurposes() -> String
- Nowość:
getAllPurposesIDs() -> [String]
12. Uzyskaj włączone cele
- Stary:
getEnabledPurposes() -> String
- Nowość:
getEnabledPurposesIDs() -> [String]
13. Pobierz wszystkich dostawców
- Stary:
getAllVendors() -> String
- Nowość:
getAllVendorsIDs() -> [String]
14. Uzyskaj włączonych dostawców
- Stary:
getEnabledVendors() -> String
- Nowość:
getEnabledVendorsIDs() -> [String]
15. Sprawdź cel zgody
- Stary:
hasPurposeConsent(String) -> Bool
- Nowość:
hasPurposeConsent(id: String) -> Bool
16. Sprawdź zgodę dostawcy
- Stary:
hasVendorConsent(String) -> Bool
- Nowość:
hasVendorConsent(id: String) -> Bool
17. Eksportuj ciąg CMP
- Stary:
exportCmpString() -> String
- Nowość:
exportCMPInfo() -> String
18. Importuj ciąg CMP
- Stary:
importCmpString(String, completion: (Error?) -> Void)
- Nowość:
importCMPInfo(String, completion: (Error?) -> Void)
19. Zresetuj dane zgody
- Stary:
reset()
- Nowość:
resetConsentManagementData(completion: (Error?) -> Void)
Metody przestarzałe:
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)
Uwaga: Nowy zestaw SDK korzysta ze współdzielonej instancji (CMPManager.shared
) i wzorzec delegata dla wywołań zwrotnych. Implementacja CMPManagerDelegate
do obsługi zdarzeń.
Przykłady migracji
Szybki
// ============================================
// 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");
}
}];
}