Info
Contenu

[Android] 1. ConsentManager Intégration SDK

Les ConsentManager Le SDK pour les applications Android implémente et fournit des fonctionnalités pour informer l'utilisateur sur la protection des données et demander et recueillir le consentement de l'utilisateur. Il permet aux développeurs d'applications d'intégrer facilement le ConsentManager service dans leur application.

Comment ça marche

  1. Intégrez le SDK dans l'application et configurez les paramètres du SDK
  2. Une fois le SDK intégré dans une application, le SDK fournira des fonctions au développeur de l'application afin de récupérer les données de consentement
  3. Dès que l'application démarre, le SDK récupère automatiquement les informations du ConsentManager serveurs afin de préparer le SDK à son utilisation.
  4. Il est recommandé qu'au démarrage de l'application, l'application crée une instance de classe CMPConsentTool. Une fois le fichier créé, le SDK affichera automatiquement l'écran de consentement si nécessaire.
  5. Lorsque l'application souhaite traiter des données personnelles, elle doit «demander» au SDK si le consentement a été donné pour l'objectif et le fournisseur spécifiques.

L’installation

Dépôt sur Bitbucket: https://bitbucket.org/consentmanager/android-consentmanager/src/master/

gradle

Étape 1. Ajoutez le référentiel jitpack à votre build.gradle racine à la fin des référentiels:

allprojects {  
  repositories {    
    ...    
    maven { url 'https://jitpack.io' }  
  }
}

Étape 2. Ajoutez la dépendance à vos applications build.gradle. (Pour toujours obtenir la dernière version, utilisez le symbole + pour obtenir les dernières mises à jour. Vous pouvez par exemple toujours obtenir les dernières versions pour les mises à jour mineures via 1.x.+)

dependencies {
  implementation 'org.bitbucket.consentmanager:android-consentmanager:1.5.+'
}

Maven

Étape 1. Ajoutez le référentiel jitpack à votre build.gradle à la fin des référentiels:

    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>

Étape 2. Ajoutez la dépendance à vos applications build.gradle. (Pour toujours obtenir la dernière version dans maven, vous pouvez utiliser différentes méthodes pour décliner la plage de versions. Vous pouvez les rechercher ici )

    <dependency>
        <groupId>org.bitbucket.consentmanager</groupId>
        <artifactId>android-consentmanager</artifactId>
        <version>1.5.7</version>
    </dependency>

Utilisation de la bibliothèque

Permissions

Ce SDK nécessite les autorisations suivantes, veuillez vous assurer de les ajouter à votre AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

Lancer l'outil ConsentTool

Avec l'app-start (généralement votre fonction viewDidAppear), vous devez créer une instance de la classe CMPConsentTool. Cela récupérera automatiquement les données nécessaires de notre serveur et déterminera si l'écran de consentement doit être affiché ou non. Si tel est le cas, le SDK affichera automatiquement l'écran de consentement à ce stade, collectera les données et fournira les données à l'application. L'instance peut ensuite être utilisée pour obtenir les détails du consentement du SDK afin de l'utiliser dans l'application.

Pour lancer le ConsentTool, accédez à votre classe ciblée et créez une instance de CMPConsentTool comme indiqué ci-dessous:

//...
import net.consentmanager.sdk.CMPConsentTool;
//...
public class MainActivity extends AppCompatActivity {
    private CMPConsentTool consentTool;
    //...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      //..
      consentTool = CMPConsentTool.createInstance(this, 123456, "consentmanager.mgr.consensu.org", "MyFavouriteApp", "");
    }
//...
}

 

Pour créer l'instance de CMPConsentTool, vous devez configurer l'instance. Vous devrez fournir l'ID CMP, le domaine du serveur, un nom d'application et une langue. Le CMP-ID et le domaine du serveur se trouvent dans votre ConsentManager compte sous Menu> Obtenir le code. Le nom de l'application peut être utilisé pour distinguer différentes applications dans le ConsentManager rapports. Pour la langue, vous pouvez utiliser une chaîne vide ("") pour la détection automatique ou un code de langue à 2 lettres ("EN", "DE", "FR" et ainsi de suite).

Les valeurs de configuration peuvent être insérées de différentes manières:

a) Configuration du SDK via CMPConfig

Ajoutez les lignes suivantes à votre code:

val config = CMPConfig.apply { 
            serverDomain = CMP_DOMAIN
            appName = CMP_APP_NAME
            language = LANG
            id = APP_ID
        }
val consentTool = CMPConsentTool.createInstance(this, config);
b) Configuration du SDK via createInstance()

Ajoutez la ligne suivante à votre code:

consentTool = CMPConsentTool.createInstance(this, 1234567, "consentmanager.mgr.consensu.org", "MyFavouriteApp", "EN");

Utilisation du SDK

Afin de vérifier si un fournisseur ou un objectif a son consentement, vous pouvez utiliser les deux méthodes:

if(consentTool.hasPurposeConsent(this,"52",false))
{
    if(consentTool.hasVendorConsent(this,"s26", false))
    {
        //do something with data
    }
}

Les deux méthodes hasPurposeConsent et hasVendorConsent nécessitent deux paramètres:

  • id - Chaîne du fournisseur ou de l'ID de fonction. Veuillez noter que les identifiants de fournisseur peuvent avoir différents formats ("123", "s123" et "c123"), veuillez vérifier avec Menu> Fournisseurs et Menu> Objectifs dans votre ConsentManager compte.
  • isIABVendor / isIABPurpose - Si le fournisseur ou l'objet est un fournisseur / objectif qui suit la norme IAB TCF, vous devrez définir un vrai, sinon un faux.

N'oubliez pas: tous les fournisseurs qui n'appartiennent pas à l'IAB ont des ID commençant par un "s" ou "c" (par exemple, "s123"); les fournisseurs qui appartiennent à l'IAB ont des ID ne commençant pas par un «s» ou «c».

Réouverture de l'écran de consentement

Afin de permettre à l'utilisateur de modifier les choix, vous pouvez simplement appeler openCmpConsentToolView():

consentTool.openCmpConsentToolView(this);

Dans certains cas, une application native peut contenir des vues Web afin d'afficher certaines choses comme du contenu publicitaire ou publicitaire. Afin de transmettre les informations de consentement du SDK à la vue Web, veuillez utiliser la fonction:

String consentData = CMPConsentTool.exportCMPData(this);

Cela exportera les informations de consentement et toutes les autres données nécessaires au CMP. Vous pouvez ensuite transmettre ces informations au CMP qui se trouve dans votre vue Web en l'ajoutant à l'URL appelée dans la vue Web:

myWebView.loadURL("https://mywebsite.com/....#cmpimport=" + consentData);

Écouteurs d'événements personnalisés

Pour ajouter une logique de processus supplémentaire, vous pouvez utiliser des écouteurs d'événement. Les écouteurs d'événement suivants sont disponibles :

Nom

Se produit

 

OnOpenCallback

Écouteur d'événement à l'ouverture du CMP

OnCMPCloseCallback

Écouteur d'événement lorsque CMP est fermé

SurCMPNotOpenedCallback

Écouteur d'événement lorsque CMP n'a pas besoin d'être ouvert

OnErrorCallback

Écouteur d'événement lorsqu'il y a une erreur dans le processus de gestion des consentements.

Autorisation d'importation/exportation

Pour importer ou exporter le consentement, vous pouvez utiliser la fonction exportCMPData(Contexte contextuel) et importCMPData (contexte contextuel, chaîne cmpData). Vérifiez l'exemple ci-dessous : 

La chaîne de consentement que vous devez transmettre doit être encodée en base64.

 

Diagramme de séquence du SDK CMP

Cmp-Sequence-Diagram-(1).png


Préférences partagées

Le SDK définira les valeurs de préférences partagées pour IAB TCF v1, IAB TCF v2, IAB USPrivacy et Google AC String. Ces valeurs peuvent être lues à l'aide du code suivant:

Context mContext = getApplicationContext();

SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);

SharedPreferences.OnSharedPreferenceChangeListener mListener;

mListener = new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
                        if (key.equals([Specific Consent Key])) {
                                   // Update Consent settings
                                   }
                        }
            };
mPreferences.registerOnSharedPreferenceChangeListener(mListener);

 

Les clés suivantes sont définies:

TCF de l'IAB v1  
IABConsent_CMPPresent Boolean: Défini sur true si un CMP implémentant cette spécification est présent dans l'application. Idéalement défini par l'éditeur dès que possible, mais peut également être défini par le CMP en variante.
IABConsent_SubjectToGDPR String 1 - (soumis au RGPD), 0 - (non soumis au RGPD), Nil - indéterminé (par défaut avant l'initialisation). S'aligne sur l'avis IAB OpenRTB GDPR. Décidé d'être String, pour avoir le statut non initialisé.
IABConsent_ConsentString String: Chaîne de consentement
IABConsent_ParsedPurposeConsents String (de «0» et «1») où le caractère en position N indique le statut de consentement à l'ID d'objet N tel que défini dans la liste globale des fournisseurs. Chaîne de consentement donnée pour permettre une vérification simple. Le premier caractère à partir de la gauche étant le but 1, ...
IABConsent_ParsedVendorConsents String (de «0» et «1») où le caractère en position N indique le statut de consentement à l'ID de fournisseur N tel que défini dans la liste globale des fournisseurs. Chaîne de consentement donnée pour permettre une vérification simple. Le premier caractère à gauche étant le vendeur 1, ... 
TCF de l'IAB v2  
IABTCF_CmpSdkID Number: ID entier non signé du SDK CMP
IABTCF_CmpSdkVersion Number: Numéro de version entier non signé du SDK CMP
IABTCF_PolicyVersion Number: L'entier non signé représentant la version du TCF à laquelle ces consentements adhèrent.
IABTCF_gdprApplies Number:

1 Le RGPD s'applique dans le contexte actuel

0 - GDPR fait pas appliquer dans le contexte actuel

once - indéterminé (par défaut avant l'initialisation)

IABTCF_PublisherCC String: Code ISO 3166-1 alpha-2 à deux lettres - Défaut: AA (inconnu)
IABTCF_PurposeOneTreatment Number:

0 - pas de traitement spécial du but un

1 - but un non divulgué

Annuler la valeur par défaut - 0

Les fournisseurs peuvent utiliser cette valeur pour déterminer si le consentement à la première fin est requis.

IABTCF_UseNonStandardStacks Number:

1 - CMP a utilisé une pile non standard

0 - CMP n'a pas utilisé de pile non standard

IABTCF_TCString String: Chaîne TC entièrement codée
IABTCF_VendorConsents Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut de consentement pour l'ID du fournisseur n + 1; false et true respectivement. par exemple. '1' à l'index 0 est le consentement true pour l'ID du fournisseur 1
IABTCF_VendorLegitimateInterests Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut d'intérêt légitime pour l'ID du fournisseur n + 1; false et true respectivement. par exemple. '1' à l'index 0 l'intérêt légitime est-il établi true pour l'ID du fournisseur 1
IABTCF_PurposeConsents Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut de consentement pour l'identification d'objet n + 1; false et true respectivement. par exemple. '1' à l'index 0 est le consentement true à des fins d'identification 1
IABTCF_PurposeLegitimateInterests Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut d'intérêt légitime pour l'identification d'objet n + 1; false et true respectivement. par exemple. '1' à l'index 0 l'intérêt légitime est-il établi true à des fins d'identification 1
IABTCF_SpecialFeaturesOptIns Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut d'activation pour l'ID de fonction spéciale n + 1; false et true respectivement. par exemple. '1' à l'index 0 est opt-in true pour l'ID de fonction spéciale 1
IABTCF_PublisherRestrictions{ID} String ['0','1', or '2']: La valeur à la position n - où nl'indexation de commence à 0 - indique le type de restriction de l'éditeur (0-2) pour le fournisseur n + 1; (voir Types de restrictions de l'éditeur). par exemple. '2' à l'index 0 est restrictionType 2 pour l'ID du fournisseur 1. {ID} fait référence à l'ID d'objet.
IABTCF_PublisherConsent Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut de consentement à l'objectif pour l'ID d'objet n + 1 pour l'éditeur, car ils correspondent aux objectifs de la liste mondiale des fournisseurs; false et true respectivement. par exemple. '1' à l'index 0 est le consentement true à des fins d'identification 1
IABTCF_PublisherLegitimateInterests Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut d'intérêt légitime de la finalité pour l'identification de la finalité n + 1 pour l'éditeur, car ils correspondent aux objectifs de la liste mondiale des fournisseurs; false et true respectivement. par exemple. '1' à l'index 0 l'intérêt légitime est-il établi true à des fins d'identification 1
IABTCF_PublisherCustomPurposesConsents Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut de consentement à la finalité pour l'ID de finalité personnalisée de l'éditeur n + 1 pour l'éditeur; false et true respectivement. par exemple. '1' à l'index 0 est le consentement true pour un identifiant à usage personnalisé 1
IABTCF_PublisherCustomPurposesLegitimateInterests Binary String: Les '0' or '1' à la position n - où nl'indexation de commence à 0 - indique le statut d'intérêt légitime de la finalité pour l'identifiant de finalité personnalisé de l'éditeur n + 1 pour l'éditeur; false et true respectivement. par exemple. '1' à l'index 0 l'intérêt légitime est-il établi true pour un identifiant à usage personnalisé 1
IAB États-Unis  
IABUSPrivacy_String String: S'aligne sur l'avis IAB OpenRTB CCPA. La chaîne encode tous les choix et informations.
Chaîne Google AC  
IABTCF_AddtlConsent

String: Correspond aux spécifications techniques du mode de consentement supplémentaire de Google. 

(Obsolète) Blocage de contenu dynamique avec espace réservé webView

Cette fonction est obsolète et sera supprimée à l'avenir. La raison de l'obsolescence est qu'avec les API d'activation et de désactivation du fournisseur et de l'objectif, il n'est plus nécessaire de créer un espace réservé. Vous pouvez ajouter votre propre interface utilisateur et votre propre logique métier et activer et désactiver dynamiquement les fournisseurs. Au lieu d'utiliser cette fonction, vous devez utiliser le enableVendorList() et désactiverVendorList() pour gérer les fournisseurs activés ou désactivés, et créez votre propre interface utilisateur pour afficher ces informations à l'utilisateur.

L'espace réservé viewObject peut être implémenté pour obtenir la fonctionnalité de blocage de contenu dynamique ici.Vous pouvez créer la vue avec la méthode suivante : 

CMPPlaceholder placeholderView = CMPConsentTool.createPlaceholder(getApplicationContext(),CMPPlaceholderParams
                        .ofVendor("${vendorId}"), new CMPPlaceholderEventListener() {
                        
                    @Override
                    public void vendorAccepted(WebView view) {
                    	//... Actions to trigger if Consent is accepted
                        // Like showing Youtube Video View
                    	}
                    });

Avec l'objet Wrapper CMPPlaceholderParams vous pouvez également transmettre des paramètres facultatifs tels que des textes personnalisés ou une image d'aperçu facultative. Les fonctions du constructeur sont appelées setCustomplaceholder(String headline, String mainText, String checkboxText, String buttonText) et setOptionalImageUrl(String imageUrl).

La logique métier requise, lorsque vous souhaitez afficher la vue et lorsqu'elle n'a pas besoin d'être appliquée par le développeur. Vous pouvez transmettre la condition et les actions requises en utilisant les rappels EvenListener du CMPPlaceholderEventlistener. L'événement requis suivant doit être mis en œuvre :

Obligatoire: vendorAccepted(CMPPlaceholderView view) { // Your logic }

En option: errorOccurred(String message) { // Error handling }

Retour en haut de la page