[iOS] 0. Migrationsguide
Den här guiden hjälper dig att migrera från den tidigare versionen av CMP SDK till den nuvarande versionen. Vi kommer att täcka ändringar i metodnamn, parametrar och ny eller föråldrad funktionalitet. För exempel på demoappar, kolla denna länk.
Var medveten om att den här versionen av CMP SDK byggdes om helt från grunden, och därför representerar den en stor brytande förändring, eftersom alla metoder döptes om, liksom signaturerna, och erbjuder nu återuppringningar till nästan alla metoder. I samtliga fall, måste du ändra din kod och uppdatera dina beroenden för att säkerställa att din mobilapp fungerar som förväntat. Dessutom är det värt att nämna det all data som finns kvar av den tidigare versionen av vår SDK på användarnas enheter kommer att raderas, vilket kommer att tvinga appen att visa samtyckesskiktet igen.
arkiv
Observera att alla våra arkiv har ändrats för iOS SDK. Följ instruktionerna nedan för att ta reda på var du ska peka din beroendehanterare.
Lägg också märke till att vi tillhandahåll inte en statisk version av vårt anpassade ramverk.
kokopod
På din Podfile, ersätt den föregående raden med den nedan:
pod 'cm-sdk-ios-v3, '3.8.0'
Efter att ha ändrat, kör detta på kommandoraden:
pod install --repo-update
Swift Package Manager
Vårt XCFramework-paket finns nu på https://github.com/iubenda/cm-sdk-xcframework-v3.
På XCode, gå till menyn Arkiv > Lägg till paketberoende och peka på webbadressen ovan.
Viktiga migrationspunkter
-
Delegatmönster: Istället för enskilda lyssnare använder den nya versionen ett enda delegatprotokoll (
CMPManagerDelegate) för att hantera händelser. Den innehåller 4 huvudhändelser:-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Detta utlöses när samtyckeslagret stängdes efter att användaren uppdaterat sina samtycken ELLER när man åberopar metoder som orsakar ändringar i samtyckena, som acceptAll, rejectAll, acceptVendors, rejectVendors, etc. Det betyder att användaren accepterade eller avvisade några av alla. av samtyckena och att dessa sparades korrekt i enheten. -
didShowConsentLayer
Detta utlöses när samtyckeslagret faktiskt visades. Det betyder att det inte fanns ett giltigt samtycke i enheten, så ett nytt bör hämtas. -
didCloseConsentLayer
Detta utlöses när SDK:n kontrollerade behovet av ett samtycke, men det behövdes inte och lagret visades inte. Det betyder att det redan finns en giltig i enheten, så en ny är inte nödvändig och tue samtyckeslager kommer inte att visas. -
didReceiveError
Detta utlöses när SDK-operationen har orsakat något fel.
-
- Kompletteringshanterare: Många metoder inkluderar nu kompletteringshanterare för asynkrona operationer. Uppdatera din kod för att hantera dessa återuppringningar på rätt sätt.
-
Samtyckessträng: Använda
exportCMPInfo()istället förgetConsentString()för att hämta samtyckesinformationen. - Säljarens samtycke: Metoderna för att få tillstånd från leverantörer och ändamål returnerar nu arrayer av ID:n. Du kan behöva justera din logik för att hantera dessa arrayer.
-
USA:s sekretesssträng: Ocuco-landskapet
getUSPrivacyString()metoden har fasats ut. Om du använde detta för CCPA-efterlevnad, observera att den här metoden inte är tillgänglig längre. -
Kontroll av samtyckeskrav: Använd det nya
checkAndOpen(completion:)metod för att automatiskt avgöra om samtyckesskiktet måste visas.
Metoder och signaturer ändras
Initieringen
- Old:
CMPConsentTool(cmpConfig: CmpConfig).initialize() - Ny:
CMPManager.shared.setUrlConfig(UrlConfig)
Ställ in UI-konfiguration
- Old:
.withCmpViewControllerConfigurationBlock { ... } - Ny:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
Kontrollera och öppna samtyckeslagret
- Old:
check({ ... }, isCached: Bool) - Ny:
checkAndOpen(completion: (Error?) -> Void)
Öppna samtyckeslager
- Old:
openView() - Ny:
forceOpen(completion: (Error?) -> Void)
Godkänn alla samtycken
- Old:
acceptAll(onFinish: () -> Void) - Ny:
acceptAll(completion: (Error?) -> Void)
Avvisa alla samtycken
- Old:
rejectAll(onFinish: () -> Void) - Ny:
rejectAll(completion: (Error?) -> Void)
Aktivera syften
- Old:
enablePurposeList([String], onFinish: () -> Void) - Ny:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
Inaktivera syften
- Old:
disablePurposeList([String], onFinish: () -> Void) - Ny:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
Aktivera leverantörer
- Old:
enableVendorList([String], onFinish: () -> Void) - Ny:
acceptVendors([String], completion: (Error?) -> Void)
Inaktivera leverantörer
- Old:
disableVendorList([String], onFinish: () -> Void) - Ny:
rejectVendors([String], completion: (Error?) -> Void)
Få alla syften
- Old:
getAllPurposes() -> String - Ny:
getUserStatus() -> [CMPUserStatusResponse]
Få aktiverade syften
- Old:
getEnabledPurposes() -> String - Ny:
getUserStatus() -> [CMPUserStatusResponse]
Hämta alla leverantörer
- Old:
getAllVendors() -> String - Ny:
getUserStatus() -> [CMPUserStatusResponse]
Få aktiverade leverantörer
- Old:
getEnabledVendors() -> String - Ny:
getUserStatus() -> [CMPUserStatusResponse]
Kontrollera Syfte Samtycke
- Old:
hasPurposeConsent(String) -> Bool - Ny:
getStatusForPurpose(id: String) -> [UniqueConsentStatus]
Kontrollera leverantörens samtycke
- Old:
hasVendorConsent(String) -> Bool - Ny:
getStatusForVendor(id: String) -> [UniqueConsentStatus]
Exportera CMP-sträng
- Old:
exportCmpString() -> String - Ny:
exportCMPInfo() -> String
Importera CMP-sträng
- Old:
importCmpString(String, completion: (Error?) -> Void) - Ny:
importCMPInfo(String, completion: (Error?) -> Void)
Återställ samtyckesdata
- Old:
reset() - Ny:
resetConsentManagementData(completion: (Error?) -> Void)
Hanterar status för Googles samtyckesläge
- Old:
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface) - Ny:
getGoogleConsentModeStatus
Hantera onLinkClick-återanropet
- Gammal: v2 hade tidigare en funktion för vitlistning. I den nuvarande versionen har processen förenklats och användaren har full kontroll över beteendet som ska följas enligt URL:en som returneras från metoden.
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
})
- Nytt: Användaren har full kontroll över vilket beteende som ska följas enligt URL:en. Därför bör de tidigare vitlistade URL:erna migreras till insidan av callback-metoden.
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
}
Föråldrade metoder:
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
Obs: Den nya SDK:n använder en delad instans (CMPManager.shared) och ett delegatmönster för återuppringningar. Genomföra CMPManagerDelegate för att hantera evenemang.
Migrationsexempel
Snabb
// ============================================
// 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");
}
}];
}







