[iOS] 0. Guide de migration
Ce guide vous aidera à migrer de la version précédente du SDK CMP vers la version actuelle. Nous aborderons les modifications apportées aux noms de méthodes, aux paramètres et aux fonctionnalités nouvelles ou obsolètes. Pour des exemples d'applications de démonstration, veuillez consulter ce lien.
Veuillez noter que cette version du SDK CMP a été entièrement reconstruite à partir de zéro et représente donc une changement majeur de rupture, comme toutes les méthodes ont été renommées, tout comme les signatures, offrant désormais également des rappels à presque toutes les méthodes. Dans tous les cas, vous devrez modifier votre code et mettre à jour vos dépendances pour vous assurer que votre application mobile fonctionne comme prévu. De plus, il convient de mentionner que toutes les données conservées par la version précédente de notre SDK sur les appareils des utilisateurs seront effacées, ce qui forcera l'application à réafficher la couche de consentement.
Dépôts
Veuillez noter que tous nos référentiels ont été modifiés pour le SDK iOS. Suivez les instructions ci-dessous pour savoir où pointer votre gestionnaire de dépendances.
Notez également que nous ne pas fournir de version statique de notre framework personnalisé.
Cacaopod
Sur votre Podfile, remplacez la ligne précédente par celle ci-dessous :
pod 'cm-sdk-ios-v3, '3.2.0'
Après avoir modifié, exécutez ceci sur la ligne de commande :
pod install --repo-update
Gestionnaire de paquets Swift
Notre package XCFramework est désormais hébergé sur https://github.com/iubenda/cm-sdk-xcframework-v3.
Sur XCode, allez dans le menu Fichier > Ajouter un package dépendant et pointez-le vers l'URL ci-dessus.
Principaux points de migration
-
Modèle de délégué : Au lieu d'écouteurs individuels, la nouvelle version utilise un protocole de délégué unique (
CMPManagerDelegate
) pour gérer les événements. Il contient 4 événements principaux :-
didReceiveConsent(consent: String, jsonObject: [String : Any])
Cela se déclenche lorsque la couche de consentement a été fermée après que l'utilisateur a mis à jour ses consentements OU lors de l'appel de méthodes qui provoquent des modifications dans les consentements, comme acceptAll, rejectAll, acceptVendors, rejectVendors, etc. Cela signifie que l'utilisateur a accepté ou rejeté certains des consentements, et que ceux-ci ont été correctement enregistrés dans l'appareil. -
didShowConsentLayer
Cela se déclenche lorsque la couche de consentement a été effectivement affichée. Cela signifie qu'aucun consentement n'était valide sur l'appareil, il faut donc en collecter un nouveau. -
didCloseConsentLayer
Cela se produit lorsque le SDK a vérifié la nécessité d'un consentement, mais que celui-ci n'était pas nécessaire et que la couche n'était pas affichée. Cela signifie qu'il existe déjà une couche valide dans l'appareil, donc une nouvelle couche n'est pas nécessaire et la couche de consentement ne s'affichera pas. -
didReceiveError
Cela est déclenché lorsque l’opération SDK a généré une erreur.
-
- Gestionnaires d'achèvement : De nombreuses méthodes incluent désormais des gestionnaires de complétion pour les opérations asynchrones. Mettez à jour votre code pour gérer ces rappels de manière appropriée.
-
Chaîne de consentement : Utilisez
exportCMPInfo()
au lieu degetConsentString()
pour récupérer les informations de consentement. - Consentements du fournisseur et de l'objectif : Les méthodes permettant d'obtenir les consentements des fournisseurs et des objectifs renvoient désormais des tableaux d'identifiants. Vous devrez peut-être ajuster votre logique pour gérer ces tableaux.
-
Chaîne de confidentialité américaine : Le
getUSPrivacyString()
La méthode est obsolète. Si vous l'utilisiez pour la conformité CCPA, veuillez noter que cette méthode n'est plus disponible. -
Vérification des exigences de consentement : Utilisez le nouveau
checkAndOpen(completion:)
méthode permettant de déterminer automatiquement si la couche de consentement doit être affichée.
Modifications des méthodes et des signatures
1. Initialisation
- Vieux:
CMPConsentTool(cmpConfig: CmpConfig).initialize()
- Nouveau:
CMPManager.shared.setUrlConfig(UrlConfig)
2. Définir la configuration de l'interface utilisateur
- Vieux:
.withCmpViewControllerConfigurationBlock { ... }
- Nouveau:
CMPManager.shared.setWebViewConfig(ConsentLayerUIConfig())
3. Vérifiez et ouvrez la couche de consentement
- Vieux:
check({ ... }, isCached: Bool)
- Nouveau:
checkAndOpen(completion: (Error?) -> Void)
4. Ouvrir la couche de consentement
- Vieux:
openView()
- Nouveau:
forceOpen(completion: (Error?) -> Void)
5. Accepter tous les consentements
- Vieux:
acceptAll(onFinish: () -> Void)
- Nouveau:
acceptAll(completion: (Error?) -> Void)
6. Rejeter tous les consentements
- Vieux:
rejectAll(onFinish: () -> Void)
- Nouveau:
rejectAll(completion: (Error?) -> Void)
7. Permettre des objectifs
- Vieux:
enablePurposeList([String], onFinish: () -> Void)
- Nouveau:
acceptPurposes([String], updatePurpose: Bool, completion: (Error?) -> Void)
8. Désactiver les objectifs
- Vieux:
disablePurposeList([String], onFinish: () -> Void)
- Nouveau:
rejectPurposes([String], updateVendor: Bool, completion: (Error?) -> Void)
9. Activer les fournisseurs
- Vieux:
enableVendorList([String], onFinish: () -> Void)
- Nouveau:
acceptVendors([String], completion: (Error?) -> Void)
10. Désactiver les fournisseurs
- Vieux:
disableVendorList([String], onFinish: () -> Void)
- Nouveau:
rejectVendors([String], completion: (Error?) -> Void)
11. Obtenez tous les objectifs
- Vieux:
getAllPurposes() -> String
- Nouveau:
getUserStatus() -> [CMPUserStatusResponse]
12. Obtenez des objectifs activés
- Vieux:
getEnabledPurposes() -> String
- Nouveau:
getUserStatus() -> [CMPUserStatusResponse]
13. Obtenir tous les fournisseurs
- Vieux:
getAllVendors() -> String
- Nouveau:
getUserStatus() -> [CMPUserStatusResponse]
14. Obtenez des fournisseurs habilités
- Vieux:
getEnabledVendors() -> String
- Nouveau:
getUserStatus() -> [CMPUserStatusResponse]
15. Vérifier le consentement à l'objectif
- Vieux:
hasPurposeConsent(String) -> Bool
- Nouveau:
getStatusForPurpose(id: String) -> [UniqueConsentStatus]
16. Vérifiez le consentement du fournisseur
- Vieux:
hasVendorConsent(String) -> Bool
- Nouveau:
getStatusForVendor(id: String) -> [UniqueConsentStatus]
17. Exporter la chaîne CMP
- Vieux:
exportCmpString() -> String
- Nouveau:
exportCMPInfo() -> String
18. Importer la chaîne CMP
- Vieux:
importCmpString(String, completion: (Error?) -> Void)
- Nouveau:
importCMPInfo(String, completion: (Error?) -> Void)
19. Réinitialiser les données de consentement
- Vieux:
reset()
- Nouveau:
resetConsentManagementData(completion: (Error?) -> Void)
Gestion du statut du mode consentement de Google
- Vieux:
withGoogleAnalyticsCallback(analyticsListener: CmpGoogleAnalyticsInterface)
- Nouveau:
getGoogleConsentModeStatus
Méthodes déconseillées :
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
Remarque : Le nouveau SDK utilise une instance partagée (CMPManager.shared
) et un modèle de délégué pour les rappels. Implémenter CMPManagerDelegate
pour gérer les événements.
Exemples de migration
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");
}
}];
}