[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.2.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
-
Delegatiepatroon: In plaats van individuele luisteraars gebruikt de nieuwe versie een enkel gedelegeerd protocol (
CMPManagerDelegate
) voor het afhandelen van gebeurtenissen. Het bevat 4 hoofdgebeurtenissen:-
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. -
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. -
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. -
didReceiveError
Dit wordt geactiveerd wanneer de SDK-bewerking een fout heeft gegenereerd.
-
- Voltooiingshandlers: Veel methoden bevatten nu completion handlers voor asynchrone bewerkingen. Werk uw code bij om deze callbacks op de juiste manier te verwerken.
-
Toestemmingsstring: Gebruiken
exportCMPInfo()
in plaats vangetConsentString()
om de toestemmingsinformatie op te halen. - 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.
-
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. -
Controle op toestemmingsvereiste: Gebruik de nieuwe
checkAndOpen(completion:)
Methode om automatisch te bepalen of de toestemmingslaag moet worden weergegeven.
Wijzigingen in methoden en handtekeningen
initialisatie
- Oud:
CMPConsentTool(cmpConfig: CmpConfig).initialize()
- Nieuw:
CMPManager.shared.setUrlConfig(UrlConfig)
UI-configuratie instellen
- Oud:
.withCmpViewControllerConfigurationBlock { ... }
- Nieuw:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
Controleer en open de toestemmingslaag
- Oud:
check({ ... }, isCached: Bool)
- Nieuw:
checkAndOpen(completion: (Error?) -> Void)
Open toestemmingslaag
- Oud:
openView()
- Nieuw:
forceOpen(completion: (Error?) -> Void)
Accepteer alle toestemmingen
- Oud:
acceptAll(onFinish: () -> Void)
- Nieuw:
acceptAll(completion: (Error?) -> Void)
Alle toestemmingen afwijzen
- Oud:
rejectAll(onFinish: () -> Void)
- Nieuw:
rejectAll(completion: (Error?) -> Void)
Doeleinden inschakelen
- Oud:
enablePurposeList([String], onFinish: () -> Void)
- Nieuw:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
Doeleinden uitschakelen
- Oud:
disablePurposeList([String], onFinish: () -> Void)
- Nieuw:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
Leveranciers inschakelen
- Oud:
enableVendorList([String], onFinish: () -> Void)
- Nieuw:
acceptVendors([String], completion: (Error?) -> Void)
Leveranciers uitschakelen
- Oud:
disableVendorList([String], onFinish: () -> Void)
- Nieuw:
rejectVendors([String], completion: (Error?) -> Void)
Krijg alle doeleinden
- Oud:
getAllPurposes() -> String
- Nieuw:
getUserStatus() -> [CMPUserStatusResponse]
Doeleinden inschakelen
- Oud:
getEnabledPurposes() -> String
- Nieuw:
getUserStatus() -> [CMPUserStatusResponse]
Ontvang alle leveranciers
- Oud:
getAllVendors() -> String
- Nieuw:
getUserStatus() -> [CMPUserStatusResponse]
Leveranciers inschakelen
- Oud:
getEnabledVendors() -> String
- Nieuw:
getUserStatus() -> [CMPUserStatusResponse]
Controleer het doel van de toestemming
- Oud:
hasPurposeConsent(String) -> Bool
- Nieuw:
getStatusForPurpose(id: String) -> [UniqueConsentStatus]
Controleer toestemming van de leverancier
- Oud:
hasVendorConsent(String) -> Bool
- Nieuw:
getStatusForVendor(id: String) -> [UniqueConsentStatus]
CMP-string exporteren
- Oud:
exportCmpString() -> String
- Nieuw:
exportCMPInfo() -> String
CMP-tekenreeks importeren
- Oud:
importCmpString(String, completion: (Error?) -> Void)
- Nieuw:
importCMPInfo(String, completion: (Error?) -> Void)
Toestemmingsgegevens opnieuw instellen
- Oud:
reset()
- Nieuw:
resetConsentManagementData(completion: (Error?) -> Void)
Omgaan met de status van de Google-toestemmingsmodus
- Oud:
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface)
- Nieuw:
getGoogleConsentModeStatus
Omgaan met de onLinkClick-callback
- Oud: v2 had een whitelistfunctie. In de huidige versie is het proces vereenvoudigd en heeft de gebruiker volledige controle over het te volgen gedrag op basis van de URL die door de methode wordt geretourneerd.
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
})
- Nieuw: De gebruiker heeft volledige controle over welk gedrag hij volgt op basis van de URL. De eerder op de whitelist geplaatste URL's moeten daarom worden gemigreerd naar de callbackmethode.
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
}
Verouderde 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
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.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
}
}
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 checkAndOpen:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error initializing CMPManager: %@", error.localizedDescription);
} else {
NSLog(@"CMPManager initialized and open consent layer opened if necessary");
}
}];
}