Info
Contenu

[iOS] 3. Documentation API

accepter tout

Paramètres
Prénom Type Description
onFinish fonction Rappel pour la gestion de l'événement de consentement reçu. il sera appelé lorsque le consentement sera reçu et traité.
Retour

Aucune valeur de retour.

Nombre de pages vues

1

Exemple
func onFinish() {
    print("Notification: New consent was received")
}

// Accept all consent with a callback
cmpConsentTool.acceptAll(onFinish)


vérifier

Paramètres
Prénom Type Description
onCmpLayerOpen fonction Rappel lorsque la couche de consentement doit être ouverte.
isCached Boolean Lorsque VRAI, la demande sera mise en cache et la réponse sera enregistrée
Retour

Aucune valeur de retour.

Nombre de pages vues

1 si le paramètre isCached() est VRAI et que le consentement mis en cache a expiré

1 si les paramètres isCached() sont FAUX

0 si isCached() est VRAI et que le consentement mis en cache n'a PAS expiré

Exemple
@objc func checkCmpLayer() {
    print("Checking need for consent.")

    cmpManager?.check(
        {
            // Callback for when the consent layer needs to be opened
            print("Consent layer will open")
            self.cmpConsentTool?.openView()
        }, 
        isCached: true
    )
}


checkAndOpenConsentLayer


Vérifie si le consentement de l'utilisateur est requis et, si tel est le cas, ouvre l'interface utilisateur de la couche de consentement.

Paramètres
Aucun.
Retour

Aucune valeur de retour.

Nombre de pages vues

1

Exemple
@objc func checkAndOpenConsentLayerAction() {
    cmpManager?.checkAndOpenConsentLayer()
}


consentementDemandéAujourd'hui

Vérifie si la couche de consentement a été demandée aujourd'hui.

Paramètres
Aucun.
Retour

VRAI si le consentement de l'utilisateur a déjà été demandé aujourd'hui.

FAUX sinon.

Nombre de pages vues

0

Exemple
@objc func consentRequestedTodayAction() {
    if let calledToday = cmpManager?.consentRequestedToday() {
        print("Consent requested today: \(calledToday)")
    } else {
        print("Failed to retrieve consent request status for today.")
    }
}


désactiverPurposeList

Désactive une liste de finalités et met à jour le consentement donné.

Paramètres
Prénom Type Description
purposes tableau Liste des identifiants d'objectif à désactiver.
onFinish fonction (facultatif) Rappel pour la gestion de l'événement de consentement reçu. il sera appelé lorsque le consentement sera reçu et traité.
Retour

Aucune valeur de retour.

Nombre de pages vues

1

Exemple
func onFinish() {
    print("Notification: New consent received")
}

let purposes = ["1", "2"]

// Option with callback
cmpManager?.disablePurposeList(purposes, onFinish: onFinish)

// Option without callback
cmpManager?.disablePurposeList(purposes)


désactiverVendorList

Désactive une liste de fournisseurs et met à jour le consentement donné.

Paramètres
Prénom Type Description
vendors tableau Liste des identifiants de fournisseurs à désactiver.
onFinish fonction (facultatif) Rappel pour gérer l’événement de consentement reçu. Il sera appelé lorsque le consentement sera reçu et traité.
Retour

Aucune valeur de retour.

Nombre de pages vues

1

Exemple
func onFinish() {
    print("Notification: New consent received")
}

let vendors = ["1", "2"]

// Option with callback
cmpManager?.disableVendorList(vendors, onFinish: onFinish)

// Option without callback
cmpManager?.disableVendorList(vendors)


activerListeObjectifs

Permet une liste de finalités et met à jour le consentement donné.

Paramètres
Prénom Type Description
purposes tableau Liste des identifiants d'objectif à activer.
onFinish fonction (facultatif) Rappel pour gérer l’événement de consentement reçu. Il sera appelé lorsque le consentement sera reçu et traité.
Retour

Aucune valeur de retour

Nombre de pages vues

1

Exemple
func onFinish() {
    print("Notification: New consent received")
}

let purposes = ["1", "2"]

// Option with callback
cmpManager?.enablePurposeList(purposes, onFinish: onFinish)

// Option without callback
cmpManager?.enablePurposeList(purposes)


activerVendorList

Active une liste de fournisseurs et met à jour le consentement donné.

Paramètres
Prénom Type Description
vendors tableau Liste des ID de fournisseur à activer.
onFinish fonction (facultatif) Rappel pour gérer l’événement de consentement reçu. Je serai appelé lorsque le consentement sera reçu et traité.
Retour

Aucune valeur de retour.

Nombre de pages vues

1

Exemple
func onFinish() {
    print("Notification: New consent received")
}

let vendors = ["1", "2"]

// Option with callback
cmpManager?.enableVendorList(vendors, onFinish: onFinish)

// Option without callback
cmpManager?.enableVendorList(vendors)


exportCmpString

Exporte la chaîne CMP actuelle représentant les préférences de consentement de l'utilisateur. Cette méthode est accessible de manière statique. 

Paramètres
Aucun.
Retour

Chaîne codée en base64 CMP.

Nombre de pages vues

0

Exemple
@objc func exportConsentStringAction() {
    let exportString = cmpManager.exportCmpString()
    print(exportString ?? "No string to export.");
}


getAllPurposes

Renvoie les identifiants de tous les objectifs.

Paramètres
Aucun.
Retour

Une chaîne séparée par des virgules contenant tous les ID utiles.

Nombre de pages vues

0

Exemple
@objc func getAllPurposesAction() {
    if let allPurposes = cmpManager?.getAllPurposes() {
        print("All purposes: \(allPurposes)")
        // Additional actions for getAllPurposes function can be added here
    } else {
        print("Failed to retrieve all purposes.")
    }
}


getAllPurposeList

Renvoie une liste d’ID tous usages pour une CMP donnée.

Paramètres
Aucun.
Retour

Une liste contenant des identifiants tous usages.

Nombre de pages vues

0

Exemple
@objc func getAllPurposeListAction() {
    // Action for getAllPurposeList function
    if let allPurposes = cmpManager?.getAllPurposesList() {
        print("All purposes list: \(allPurposes.joined(separator: ", "))")
    } else {
        print("Failed to retrieve all purposes list.")
    }
}


getAllVendors

Renvoie les identifiants de tous les fournisseurs pour un CMP donné.

Paramètres
Aucun.
Retour

Une chaîne séparée par des virgules contenant tous les ID de fournisseurs.

Nombre de pages vues

0

Exemple
@objc func getAllVendorsAction() {
    if let allPurposes = cmpManager?.getAllVendors() {
        print("Printing all Vendors: \(allPurposes)")
    } else {
        print("Failed to retrieve all vendors.")
    }
}


getAllVendorsList

Renvoie une liste de tous les ID de fournisseurs pour un CMP donné.

Paramètres
Aucun.
Retour

Une liste contenant tous les identifiants des fournisseurs.

Nombre de pages vues

0

Exemple
@objc func getAllVendorsListAction() {
    if let allVendors = cmpManager?.getAllVendorsList() {
        print("All vendors list: \(allVendors.joined(separator: ", "))")
    } else {
        print("Failed to retrieve all vendors list.")
    }
}


getConsentString

Renvoie une chaîne avec le dernier consentement donné.

Paramètres
Aucun.
Retour

Une chaîne avec le dernier consentement reconnu par l'utilisateur.

Nombre de pages vues

0

Exemple
@objc func getAllVendorsListAction() {
    if let allVendors = cmpManager?.getAllVendorsList() {
        print("All vendors list: \(allVendors.joined(separator: ", "))")
    } else {
        print("Failed to retrieve all vendors list.")
    }
}

getDisabledPurposes

Renvoie les ID de tous les objectifs désactivés pour une CMP donnée.

Paramètres
Aucun.
Retour

Une chaîne séparée par des virgules contenant les ID de tous les objectifs désactivés.

Nombre de pages vues

0

Exemple
@objc func getDisabledPurposesAction() {
    if let disabledPurposes = cmpManager?.getDisabledPurposes() {
        print("Disabled purposes: \(disabledPurposes)")
    } else {
        print("Failed to retrieve disabled purposes.")
    }
}


getDisabledVendors

Renvoie tous les ID de fournisseurs désactivés pour un CMP donné.

Paramètres
Aucun.
Retour

Une chaîne séparée par des virgules contenant tous les ID de fournisseurs désactivés.

Nombre de pages vues

0

Exemple
@objc func getDisabledVendorsAction() {
    if let disabledVendors = cmpManager?.getDisabledVendors() {
        print("Disabled vendors: \(disabledVendors)")
    } else {
        print("Failed to retrieve disabled vendors.")
    }
}


getEnabledPurposes

Renvoie tous les ID de fournisseurs activés pour un CMP donné.

Paramètres
Aucun.
Retour

Une chaîne séparée par des virgules contenant tous les ID de fournisseurs activés.

Nombre de pages vues

0

Exemple
@objc func getEnabledVendorsAction() {
    if let enabledVendors = cmpManager?.getEnabledVendors() {
        print("Enabled vendors: \(enabledVendors)")
    } else {
        print("Failed to retrieve enabled vendors.")
    }
}


getEnabledPurposeList

Renvoie une liste de tous les ID d’objectifs activés pour une CMP donnée.

Paramètres
Aucun.
Retour

Une liste contenant les identifiants de tous les objectifs activés.

Nombre de pages vues

0

Exemple
@objc func getEnabledPurposesAction() {
    if let enabledPurposes = cmpManager?.getEnabledPurposes() {
        print("Enabled purposes: \(enabledPurposes.joined(separator: ", "))")
    } else {
        print("Failed to retrieve enabled purposes list.")
    }
}


getEnabledVendorsgetEnabledVendors

Renvoie tous les ID de fournisseurs activés pour un CMP donné.

Paramètres
Aucun.
Retour

Une chaîne séparée par des virgules contenant tous les ID de fournisseurs activés.

Nombre de pages vues

0

Exemple
@objc func getEnabledVendorsAction() {
    if let enabledVendors = cmpManager?.getEnabledVendors() {
        print("Enabled vendors: \(enabledVendors)")
    } else {
        print("Failed to retrieve enabled vendors.")
    }
}


getEnabledVendorListgetEnabledVendorList

Renvoie une liste avec tous les ID de fournisseurs activés pour un CMP donné.

Paramètres
Aucun.
Retour

Une liste contenant tous les identifiants des fournisseurs activés.

Nombre de pages vues

0

Exemple
@objc func getEnabledVendorsAction() {
    if let enabledVendors = cmpManager?.getEnabledVendors() {
        print("Enabled vendors: \(enabledVendors.joined(separator: ", "))")
    } else {
        print("Failed to retrieve enabled vendors.")
    }
}


getGoogleACString

Récupère la chaîne d'ID de consentement supplémentaire de Google (`addtlConsent`) définie par le consent manager.

Pour plus d'informations, consultez le Spécifications techniques du consentement supplémentaire de Google.  

Paramètres
Aucun.
Retour

Une liste contenant tous les identifiants des fournisseurs activés.

Nombre de pages vues

0

Exemple
@objc func getGoogleConsentStringAction() {
    if let googleACString = cmpManager?.getGoogleACString() {
        print("Google Additional Consent String: \(googleACString)")
    } else {
        print("Failed to retrieve Google Additional Consent String.")
    }
}


getUSPrivacyString

Récupère la chaîne de confidentialité américaine. Cette chaîne de confidentialité américaine est un cookie qui stocke des informations sur les divulgations effectuées et les choix sélectionnés par le visiteur du site Web concernant ses droits de consommateur.

Paramètres
Aucun.
Retour

Une chaîne avec les données de confidentialité américaines définies par consentmanager.

Nombre de pages vues

0

Exemple
@objc func getUSPrivacyStringAction() {
    if let theUSPrivacyString = cmpManager?.getUSPrivacyString() {
        print("US Privacy string contents: \(theUSPrivacyString)")
    } else {
        print("Failed to retrieve US Privacy string.")
    }
}


a le consentement

Vérifie si l'utilisateur a déjà donné son consentement. La couche de consentement peut avoir la possibilité de simplement fermer la couche. Dans ce cas, l’utilisateur n’a pas donné son consentement.

Paramètres
Aucun.
Retour

Une chaîne avec les données de confidentialité américaines définies par consentmanager.

Nombre de pages vues

0

Exemple
@objc func getHasConsentAction() {
    if let hasConsent = cmpManager?.hasConsent() {
        let consentStatus = hasConsent ? "Yes" : "No"
        print("Consent provided by the user? \(consentStatus)")
    } else {
        print("Failed to retrieve user consent.")
    }
}


aPurposeConsent

Vérifie si l'ID d'objectif est activé en fonction du consentement de l'utilisateur.

Paramètres
Prénom Type Description
purposeId Chaîne ID d'objectif
Retour

VRAI si

  • l'utilisateur a donné son consentement à la finalité spécifiée OU
  • pour une raison quelconque liée à une connexion Internet faible ou inexistante sur l'appareil, le consentement à cette fin n'a pas pu être récupéré. Veuillez vous référer à withErrorListener pour gérer ces conditions lors du lancement de l'application, en particulier pour les nouveaux utilisateurs qui n'ont pas encore donné leur consentement.

FAUX sinon.

Nombre de pages vues

0

Exemple
@objc func getHasPurposeConsentAction() {
    if let hasPurposeConsent = cmpManager?.hasPurposeConsent("purposeID") {
        let consentStatus = hasPurposeConsent ? "Yes" : "No"
        print("Purpose has consent provided by the user? \(consentStatus)")
    } else {
        print("Failed to retrieve user purpose consent.")
    }
}


hasVendorConsent

Vérifie si l'ID du fournisseur est activé en fonction du consentement de l'utilisateur.

Paramètres
Prénom Type Description
vendorId Chaîne fournisseur ID
Retour
  • l'utilisateur a donné son consentement au fournisseur spécifié OU
  • pour une raison quelconque liée à une connexion Internet faible ou inexistante sur l'appareil, le consentement du vendeur n'a pas pu être récupéré. Veuillez vous référer à withErrorListener pour gérer ces conditions lors du lancement de l'application, en particulier pour les nouveaux utilisateurs qui n'ont pas encore donné leur consentement.

FAUX sinon.

Nombre de pages vues

0

Exemple
@objc func getHasVendorConsentAction() {
    if let hasVendorConsent = cmpManager?.hasVendorConsent("vendorID") {
        let consentStatus = hasVendorConsent ? "Yes" : "No"
        print("Vendor has consent provided by the user? \(consentStatus)")
    } else {
        print("Failed to retrieve user vendor consent.")
    }
}

importCmpString

Importe une chaîne CMP représentant les préférences de consentement de l'utilisateur. La chaîne doit être encodée en base64

Paramètres
Prénom Type Description
chaîne de consentement  Chaîne Chaîne codée en base64 représentant le consentement
gestionnaire d'achèvement fonction (facultatif) Gestionnaire d’achèvement de rappel vers la méthode.
Retour

Aucun.

Nombre de pages vues

0

Exemple
let cmpString = "YourBase64EncodedConsentStringHere"

// Define the completion handler
let completionHandler: CmpImportCompletionHandler = { error in
    if let error = error {
        print("Failed to import CMP string: \(error.localizedDescription)")
    } else {
        print("CMP string imported successfully")
    }
}

cmpManager.importCmpString(cmpString, completion: completionHandler)


initialiser

La fonction d'initialisation initialisera la couche de consentement et vérifiera automatiquement si l'utilisateur a besoin d'un consentement ou non. Cette fonction ouvrira éventuellement la couche de consentement et interagira avec l'API Apple Tracking Transparency pour demander à l'utilisateur son consentement

Paramètres
Prénom Type Description
cmpConfig CmpConfig L'objet CmpConfig est transmis avec les informations concernant l'appId, le domaine, l'appName et la langue (facultatif)
Retour

L'objet CMPManager.

Nombre de pages vues

1

Exemple
// Example of a default implementation of the SDK.

class ViewController: UIViewController {

  // Usual implementation of a View Controller
  
  var cmpManager: CMPConsentTool? = nil

  override func viewDidLoad() {

      super.viewDidLoad()

      // Configure your CMP
      let cmpConfig: CmpConfig = CmpConfig.shared.setup(
                                          withId: "<YOUR-CONSENTMANAGER-APP-ID>, example: a000aaaa0a", 
                                          domain: "<YOUR-CONSENTMANAGER-APP-DOMAIN>, example: delivery.consentmanager.net", 
                                          appName: "<YOUR-CONSENTMANAGER-APP-NAME>, example: testApp", 
                                          language: "<YOUR-CONSENTMANAGER-APP-LANGUAGE, example: DE");

      // You can also determine log levels or ask for Apple's App Tracking Transparency, for example
      cmpConfig.logLevel = CmpLogLevel.verbose;
      cmpConfig.isAutomaticATTRequest = true;

      // Then you pass the cmpConfig to set up and initialize the instance of our SDK		
      cmpManager = CMPConsentTool(cmpConfig: cmpConfig)
              .withErrorListener(onCMPError)
              .withCloseListener(onClose)
              .withOpenListener(onOpen)
              .withOnCMPNotOpenedListener(onCMPNotOpened)
              .withOnCmpButtonClickedCallback(onButtonClickedEvent)
              .initialize()  // This method will trigger the webview loading to collect consent, if necessary
  }
}


isConsentRequired

Paramètres
Aucun.
Retour

VRAI si l'utilisateur doit donner son consentement

FAUX sinon

Nombre de pages vues

0

Exemple
@objc func checkIfConsentIsRequired() {
    if let isConsentRequired = cmpConsentTool?.isConsentRequired() {
        let consentRequiredStatus = isConsentRequired ? "Yes" : "No"
        print("Is user consent required? \(consentRequiredStatus)")
    } else {
        print("Failed to determine if user consent is required.")
    }
}


ouvrirView

Ouvre de force la vue Web de la couche de consentement CMP.

Paramètres
Aucun.
Retour

Aucune valeur de retour

Nombre de pages vues

1

Exemple
@objc func checkCmpLayer() {
    print("Checking CMP API...")
    cmpManager?.check(
        { 
            // Callback for when the consent layer needs to be opened
            print("Consent layer will open")
            self.cmpConsentTool?.openView()
        }, 
        isCached: true, 
        onCmpLayerNotOpen: { 
            // Callback for when the consent layer does not need to be opened
            print("Consent layer will not open")
        }
    )
}


rejeter tout

Paramètres
Prénom Type Description
onFinish fonction Facultatif. Rappel pour gérer l’événement de consentement reçu. il sera appelé lorsque le consentement sera reçu et traité.
Retour

Aucune valeur de retour

Nombre de pages vues

1

Exemple
func onFinish() {
    print("Notification: New consent has been received with a Reject All response.")
}

// Reject all consent with a callback
cmpManager.rejectAll(onFinish)


réinitialiser

Réinitialise toutes les propriétés aux valeurs par défaut.

Paramètres
Aucun.
Retour

Aucune valeur de retour

Nombre de pages vues

0

Exemple
CMPManager.reset()

avecCloseListener


Ajoute un écouteur proche pour recevoir des notifications lorsque la couche de consentement est fermée.

Paramètres
Prénom Type Description
closeListener fonction Callback qui sera appelé lorsque la couche de consentement sera fermée.
Retour

CMPConsentTool

Exemple
func onClose() {
    print("APP: CLOSED")
    // Add custom business logic here
}

// Initialize cmpManager with configuration and close listener
cmpManager = CMPConsentTool(cmpConfig: cmpConfig, viewController: self)
    .withCloseListener(onClose)


avecOpenListener

Ajoute un écouteur ouvert pour recevoir des notifications lorsque la couche de consentement est ouverte.

Paramètres
Prénom Type Description
openListener fonction Callback qui sera appelé lors de l'ouverture de la couche de consentement
Retour

CMPConsentTool

Exemple
func onOpen() {
    print("APP: OPENED")
    // Add custom business logic here
}

// Initialize cmpManager with configuration and open listener
cmpManager = CMPConsentTool(cmpConfig: cmpConfig, viewController: self)
    .withCloseListener(onOpen)

avecErrorListener

Ajoute un écouteur d'erreur pour recevoir des notifications lorsqu'une erreur se produit.

Paramètres
Prénom Type Description
errorListener fonction Rappel pour ajouter une action si une erreur s'est produite.
Retour

CMPConsentTool

Exemple
func onCMPError(type: CmpErrorType, message: String?) {
    if let errorMessage = message {
        print(errorMessage)
    } else {
        print("An error occurred.")
    }

    switch type {
    case .networkError:
        print("Network error")
    case .timeoutError:
        print("Timeout error")
    case .consentDataReadWriteError:
        print("Consent data read/write error")
    case .unknownError:
        print("Unknown error")
    @unknown default:
        print("Unexpected error")
    }
}

// Initialize cmpManager with configuration and error listener
cmpManager = CMPConsentTool(cmpConfig: cmpConfig, viewController: self)
    .withErrorListener(onCMPError)


withOnCMPNotOpenedListener

Ajoute un rappel Cmp non ouvert pour recevoir une notification lorsque la couche de consentement ne s'ouvre pas. La raison la plus courante est que l’utilisateur a déjà donné son consentement.

Paramètres
Prénom Type Description
openListener fonction Rappel qui sera appelé lorsque la couche de consentement n'est pas ouverte. 
Retour

CMPConsentTool

Exemple
func onCMPNotOpened() {
    print("CMP: NOT OPENED")
    // Add custom business logic here
}

// Initialize cmpConsentTool with configuration and CMP not opened listener
cmpManager = CMPConsentTool(cmpConfig: cmpConfig, viewController: self)
    .withOnCMPNotOpenedListener(onCMPNotOpened)


withOnCmpButtonClickedCallback

Définit un rappel pour recevoir des notifications lorsque l'utilisateur clique sur un bouton pour fermer la couche de consentement.

Paramètres
Prénom Type Description
openListener fonction Rappel qui sera invoqué avec le CmpButtonEvent indiquant quel bouton a été enfoncé.
Retour

CMPConsentTool

Exemple
func onButtonClickedEvent(event: CmpButtonEvent) {
    switch event {
    case .acceptAll:
        print("User accepted all.")
    case .rejectAll:
        print("User rejected all.")
    case .save:
        print("User saved custom settings.")
    case .close:
        print("User closed consent layer without giving consent.")
    @unknown default:
        print("Unknown button event.")
    }
}

// Initialize cmpManager with configuration and button click callback
cmpManager = CMPConsentTool(cmpConfig: cmpConfig, viewController: self)
    .withOnCmpButtonClickedCallback(onButtonClickedEvent)

avecCmpViewControllerConfigurationBlock

Personnalisez le couche de consentement UIViewController.

Paramètres
Prénom Type Description

configurationBlock

CmpViewControllerConfigurationBlock

Personnaliser le couche de consentement

UIViewController.

Retour

CMPConsentTool

Exemple
cmpConsentTool = CMPConsentTool(cmpConfig: cmpConfig)
    .withCmpViewControllerConfigurationBlock { viewController in
        viewController?.modalPresentationStyle = .formSheet
    }


avecCmpViewConfigurationBlock

Personnalisez l'UiView du consentlayer.

Paramètres
Prénom Type Description

configurationBlock

CmpUIViewConfigurationBlock

Personnaliser le couche de consentement

UiView

Retour

CMPConsentTool

Exemple
let cmpLayout = CmpLayout.default()
cmpLayout?.cornerRadius = 10.0
cmpLayout?.customLayout = CGRect(x: 0, y: 0, width: 200, height: 300)

cmpConsentTool = CMPConsentTool(cmpConfig: cmpConfig)
    .withCmpViewConfigurationBlock { uiView in
        cmpLayout?.apply(to: uiView)
    }


avecMise à jourConsentement Google

Récupère l’état du mode consentement de Google. 

Paramètres
Prénom Type Description

consentMap

[Chaîne: Chaîne]?

Statut de consentement
Retour

CMPConsentTool

Exemple
cmpConsentTool = CMPConsentTool(cmpConfig: cmpConfig)
    .withUpdateGoogleConsent(onCmpUpdateGoogleConsent)

func onCmpUpdateGoogleConsent(consentMap: [String: String]?) {
    guard let consentMap = consentMap else { return }

    var firebaseConsentMap: [ConsentType: ConsentStatus] = [:]

    consentMap.forEach { key, value in
        if let consentType = convertToFirebaseConsentType(from: key),
           let consentStatus = convertToFirebaseConsentStatus(from: value) {
            firebaseConsentMap[consentType] = consentStatus
        }
    }

    Analytics.setConsent(firebaseConsentMap)
}

func convertToFirebaseConsentType(from key: String) -> ConsentType? {
    switch key {
    case "analytics_storage":
        return .analyticsStorage
    case "ad_storage":
        return .adStorage
    case "ad_user_data":
        return .adUserData
    case "ad_personalization":
        return .adPersonalization
    default:
        return nil
    }
}

func convertToFirebaseConsentStatus(from value: String) -> ConsentStatus? {
    switch value {
    case "granted":
        return .granted
    case "denied":
        return .denied
    default:
        return nil
    }
}

 

Retour en haut de la page