Aller au contenu principal

iOS

La librairie AppConsent iOS est composée de deux parties:

  • le noyau AppConsentKit, est toujours inclus
  • l'UI est disponible en deux styles différents, il faut importer la librairie correspondant à votre choix:
    • clear la librairie est AppConsentUIKitV3
    • classic deprecated, la librairie est AppConsentUIKit

Ajouter AppConsent à votre projet xCode

Il y a trois façons d'ajouter le SDK AppConsent à votre projet iOS.

Swift Package Manager

C'est la façon recommendée d'ajouter la librairie, voir la documentation officielle de Swift Packages sur le site Apple Developer pour des informations sur Swift Packages et leur utilisation dans xCode.

AppConsentKit https://gitlab.datalf.chat/customers/appconsentkit-spm

AppConsentUIKitV3 https://gitlab.datalf.chat/customers/appconsentuikitv3-spm

Drag & Drop XCFramework

Téléchargez AppConsent XCFramework.

AppConsentKit ​https://gitlab.datalf.chat/customers/appconsentkit-xcframework

AppConsentUIKitV3 ​https://gitlab.datalf.chat/customers/appconsentuikitv3-xcframework

Dans la target de votre application, sur le tab General, gilssez-déposez AppConsentKit.xcframework et AppConsentUIKitV3.xcframework dans la zone Frameworks, Libraires and Embedded Content. Vérifiez que les XCFrameworks sont configurés sur Embed & Sign.

note

Compatibilité avec xCode 12 ou plus. Deployment target iOS 11 minimum.

Cocoapods

Ajoutez les pods suivants à votre podfile:

pod 'AppConsentKit'
pod 'AppConsentUIKitV3'

Lancez pod install dans le répertoire du projet.

note

Nécessite pod version >= 1.10.0.


Comment utiliser AppConsent

  1. Récuperez votre AppKey depuis votre compte AppConsent
  2. Il faut importer le SDK dans le code: import AppConsentUIKitV3
  3. Initialiser le kit ACUIKitV3 de la manière suivante:
let appconsent = ACUIKitV3(withAppKey: "YOUR_APP_KEY", forceApplyGDPR: true, forceATT: true)
Attention

Le SDK AppConsent supporte le framework App Tracking Transparency (disponible dans iOS >=14). Il faut enregistrer la clef NSUserTrackingUsageDescription dans le fichier Info.plist de votre application.

App Tracking Transparency

App Tracking Transparency est un changement introduit par Apple dans iOS 14.5.

App Tracking Transparency exige des apps qu'elles demandent la permission de l'utilisateur avant de suivre leurs données entre les apps ou des sites-web appartenant à d'autres sociétés pour de la réclame, ou pour partager les données à des tiers. Les apps peuvent demander la permission, et dans les Réglages, les utilisateurs peuvent voir quelles applications ont demandé la permission de les suivre, les utilisateurs peuvent modifier leur choix a tout moment.

Les versions récentes de notre framework (AppConsentKit version >=1.2.11) sont pleinement compatibles et intégrées avec notre Content Management Platform. Sur le Back-office AppConsent il faut activer l'option use iOS Att, et activer l'option disable success screen (pour les téléphones avec iOS <14.5).

Attention

Il faut enregistrer la clef NSUserTrackingUsageDescription dans le fichier Info.plist de votre application.

Si vous n'avez pas mis à jour votre application avec le dernier Framework, sur les iPhone avec iOS >=14.5, l'IDFA sera 00000-00000-00000-00000.

Floating Purpose - ATT

Sur le back-office AppConsent, il faut créer un Extra-Purpose for ATT Feature.

Etapes:

  • Aller dans le menu Extra-Purposes à gauche, cliquer sur Ajouter Extra Purpose en haut à droite.
  • Entrer un nom, une description et selectionner le type Floating.
  • Sauvegarder.
  • Aller à votre Notice, cliquer sur Edit et dans la section configuration, ajouter le nouveau Floating Extra Purpose for ATT.
  • Sauvegarder.

Logs

AppConsentKit utilise os_log comme recommandé par Apple pour loguer divers message d'informaions ou de debug. Notre approche est de n'utiliser que les mechanismes par défaut d'Apple unified logging systems, aussi le niveau de log est configuré par défaut par l'environnement d'éxecution.

Vous pouvez visualiser les messages de log en utilisant au choix l'app Console, l'outil de ligne de commande log, ou la console de debug d'XCode.

Les messages de log d'AppConsentKit sont enregistré avec pour subsystem io.sfbx.appconsent et la category est soit AppConsentKit, AppConsentUIKit ou AppConsentUIKitV3.

Ci-dessous se trouve un résumé de quelques commandes log qui peuvent être utiles pour configurer le niveau de log selon son environnment de développement.

  • sur votre Mac:

    pour vérifier le niveau de log actuel: sudo log config --status --subsystem io.sfbx.appconsent

    pour changer la configuration des logs: sudo log config --mode "level:off" --subsystem io.sfbx.appconsent

  • sur le simulateur XCode:

    pour vérifier le niveau de log actuel: xcrun simctl spawn booted log config --status --subsystem io.sfbx.appconsent

    pour changer la configuration des logs: xcrun simctl spawn booted log config --mode "level:off" --subsystem io.sfbx.appconsent

  • l'option --mode prends les arguments suivants (extrait de l'entrée manual pages pour log):

    Modes can be specified as a comma-separated list of key:value pairs.

    Valid keys and their values are:
    level off | default | info | debug
    persist off | default | info | debug
    stream live | default

Fonctionnalités de AppConsent

Vérifier si l'utilisateur a donné son consentement

appconsent.consentGiven()

Renvoie true si le consentement a été donné, false sinon.

Afficher la notice

appconsent.presentNotice(force: true, viewController: self)

Affiche la notice. force:false affiche la page d'introduction avant la notice. force:true affiche directement la notice, sans page d'introduction.

appconsent.consentGiven(success: {
print("Success - Consent Given")
}, failure: { error in
print("Error: \(error)")
})

Callback quand l'utilisateur a donné son consentement.

Present Geolocation notice

appconsent.presentGeolocation(self)

Pour afficher la CMP de geolocalisation.

Vérifier si l'utilisateur a donné son consentement à la géolocalisation

appconsent.geolocationConsentGiven()

Renvoie true si le consentement a été donné, false sinon.

appconsent.geolocationConsentGiven(success: {
print("Success - Consent Given")
}, failure: { error in
print("Error: \(error)")
})

Consentable allowed - objectId

appconsent.consentableAllowed(objectId: "1")

Renvoie true si le consentable avec objectId = 1 est consenti, false sinon.

Consentable allowed - iabId

appconsent.consentableAllowed(iabId: "1")

Renvoie true si le consentable avec iabId = 1 est consenti, false sinon.

Consentable allowed - extraId

appconsent.consentableAllowed(extraId: "1")

Renvoie true si le consentable avec extraId = 1 est consenti, false sinon.

Stack allowed

appconsent.stackAllowed(iabId: "1")

Renvoie true si le consentable avec iabId = 1 est consenti, false sinon.

Vendor allowed - iabId

appconsent.vendorAllowed(iabId: "1")

Renvoie true si le vendor avec iabId = 1 est consenti, false sinon.

Vendor allowed - extraId

appconsent.vendorAllowed(extraId: "1")

Renvoie true si le vendor avec extraId = 1 est consenti, false sinon.

All Consentables allowed

appconsent.allConsentablesAllowed()

Renvoie true si tous les consentables sont acceptés, false sinon.

All Stacks allowed

appconsent.allStacksAllowed()

Renvoie true si toutes les stacks sont acceptés, false sinon.

All Vendors allowed

appconsent.allVendorsAllowed()

Renvoie true si tous les vendors sont acceptés, false sinon.

User Accept All

appconsent.userAcceptAll()

Ceci est un combinaison de allConsentablesAllowed , allStacksAllowed, allVendorsAllowed Renvoie true si tous acceptés, false sinon.

appconsent.setConsentableConsents(values: ["1": .allowed], success: {
print("Success")
}, failure: { error in
print("Error: \(error)")
})

Applique le status de consentement au consentable avec un iabId.

Attention

Key doit être un iabId, pas un objectId.

note

Cette méthode n'envoie pas de requête au serveur.

appconsent.setExtraConsentableConsents(values: ["aaa": .allowed], success: {
print("Success")
}, failure: { error in
print("Error: \(error)")
})

Applique le status de consentement au consentables avec un extraId.

Attention

Key doit être un extraId, pas un objectId.

note

Cette méthode n'envoie pas de requête au serveur.

Check for update

appconsent.checkForUpdate({ value in
print("Success: \(value)")
}, failure: { error in
print("Error: \(error)")
})

Vérifier si le consentement doit être raffraîchi (nouvelle version de la gvl, nouveaux consentables…)

Clear consents

appconsent.clearConsent()

Efface les consentements dans NSUserDefaults, mais pas sur le serveur.

Set external data

appconsent.setExternalData(shipData: ACShipData, success:, failure:)

Set external data avec un modèle ACShipData et l'envoyer au serveur.

Set externalIds

appconsent.setExternalIds(externalIds: [String: String])

Les external Ids sont sauvegardés dans le cache du framework.

Il est aussi possible de les sauvegarder sur le serveur de la manière suivante:

appconsent
.setExternalIds(externalIds: [String: String])
.saveExternalIds { state, configuration in
print(state ?? "state nil")
print(configuration ?? "configuration nil")
} failure: { error in
print(error.localizedDescription)
}

Get externalIds

appconsent.getExternalIds() ->[String, String]

Recupère les externalids.

Open App Settings

appconsent.openAppSettings() 

Ouvre les settings de l'AppConsent dans le tab general.

App Tracking is available

appconsent.appTrackingIsAvailable() ->Bool

Vérifier si le téléphone supporte l'App Tracking Transparency.
Renvoie true si c'est le cas, false sinon.

App Tracking Authorization

appconsent.appTrackingAuthorizationGiven() ->ACATTAuthorizationGiven

Vérifier si le consentement pour l'App Tracking Transparency a bien été donné.
Renvoie 0 (refusé), 1 (donné), 2 (ATT non pris en charge)

App Tracking Request

appconsent.appTrackingRequestAuthorization(_ completion: ((ACATTAuthorizationStatus)->Void)?)

Demander l'autorisation de l'utilisateur, affiche le popup de l'ATT.

note

L'affichage de l'ATT est intégré dans l'AppConsentKit quand l'utilisateur sauvegarde ses choix de consentement.

Save ATT floating purpose

appconsent.saveATTFloatingPurpose(with value: Bool, _ completion: ACResultVoidHandler?)

Sauvegarder le choix ATT de l'utilisateur sur le serveur.

Floating purpose allowed

appconsent.floatingPurposeAllowed(extraId: String) ->Bool

Vérifier si les floating purposes sont autorisés.

Attention

Il faut appeler la méthode checkForUpdate avant d'appeler la méthode ci-dessus pour rester à jour.

Display ATT if needed

appconsent.displayATTIfNeeded(_ completion: ((ACATTAuthorizationStatus)->Void)?)

Pour migrer des utilisateurs existants, il faut appeler cette méthode pour lancer l'ATT sans relancer la notice.

note

Le popup de l'att ne sera affiché que si son téléphone supporte l'ATT, si l'utilisateur à déjà donné son consentement, purpose 1 is true et le popup de l'ATT n'a pas encore été affiché.

Attention

Après ça, il faut à nouveau appeler la méthode saveATTFloatingPurpose(with value: Bool, _completion: ACResultVoidHandler?) pour envoyer le chois de l'utilisateur vers le serveur.

Delegate basic implementation

Il est possible de passer un delegate à la présentation de la notice. C'est un objet qui implémente le protocole AppConsentDelegate. Il doit implémenter les méthodes suivantes.

appconsent.delegate = self

// called when the consent has been given
func appConsentDidFinish() {
print("consent did finish")
}

// called in case of error
func appConsentDidFail(_ error: Error) {
print("consent did fail: \(error.localizedDescription)")
}

func appConsentWillAppear() { ... }
func appConsentDidAppear() { ... }
func appConsentWillDisappear() { ... }
func appConsentDidDisappear() { ... }