Examples
- Mobile / Tablette
- TV
Descriptif complet de l'exemple d'intégration ci-dessous
Dans cet exemple nous nous assurons de l'affichage de la CMP aux utilisateurs au lancement de l'application (démarrage de notre activité).
Voici les différentes étapes de cet exemple au premier lancement
- Vérification du SDK si celui-ci à déjà été initialisé (retour à false)
- Initialisation de la CMP avec l'appel de AppConsentSDK#initialize dans le cas contraire
- Une fois le SDK démarré, enregistrement des callbacks permettant de savoir quand l'utilisateur aura fini de saisir ses informations.
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire. (dans l'exemple elle s'affichera)
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (retour à true)
- Une fois le consentement donnée par l'utilisateur, la méthode #presentConsentGiven sera appelé et vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
Voici les différentes étapes de cet exemple au lancement suivant (en ayant tué l'application)
- Vérification du SDK si celui-ci à déjà été initialisé (retour à false)
- Initialisation de la CMP avec l'appel de AppConsentSDK#initialize dans le cas contraire
- Une fois le SDK démarré, enregistrement des callbacks permettant de savoir quand l'utilisateur aura fini de saisir ses informations.
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire.
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (résultat à false)
- (Par vous même) Essayez d'appeller la méthode #checkForUpdate pour vérifier si la Notice a été mise à jour depuis votre Dashboard (sauf action de votre part, résultat à false)
- Aucunes action n'est nécessaire, vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
Voici les différentes étapes de cet exemple au lancement suivant (en quittant l'application et en la remettant en avant sans la tuée)
- Vérification du SDK si celui-ci à déjà été initialisé (retour à true)
- Récupération de l'instance pour l'utiliser localement dans notre activity
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire.
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (résultat à false)
- (Par vous même) Essayez d'appeller la méthode #checkForUpdate pour vérifier si la Notice a été mise à jour depuis votre Dashboard (sauf action de votre part, résultat à false)
- Aucunes action n'est nécessaire, vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
Voici les différentes étapes de cet exemple au lancement suivant ET après avoir modifié votre Notice depuis le Dashboard (en quittant l'application et en la remettant en avant sans la tuée)
- Vérification du SDK si celui-ci à déjà été initialisé (retour à true)
- Récupération de l'instance pour l'utiliser localement dans notre activity
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire.
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (résultat à false)
- (Par vous même) Essayez d'appeller la méthode #checkForUpdate pour vérifier si la Notice a été mise à jour depuis votre Dashboard (résultat à true car votre Notice a été mise à jour)
- Suppression local du précédent consentement utilisateur #clearConsent
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire. (retour à true)
- Une fois le consentement donnée par l'utilisateur, la méthode #presentConsentGiven sera appelé et vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
- Kotlin
- Java
import com.sfbx.appconsent.core.model.gcm.GCMStatus
import com.sfbx.appconsentv3.AppConsent
import com.sfbx.appconsentv3.ui.AppConsentSDK
import com.sfbx.appconsentv3.ui.listener.OnPresentNoticeListener
import com.sfbx.appconsentv3.ui.model.ACConfiguration
class MainActivity : AppCompatActivity() {
private var appConsent: AppConsent? = null
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.buttonDisplaySecondActivity.setOnClickListener {
startActivity(Intent(this, SecondActivity::class.java))
}
/*
Permet de savoir si le SDK a dors et déjà été initialisé
*/
if (!AppConsentSDK.isSdkInitialized() || AppConsentSDK.getInstance() == null) {
initCmpModule()
} else {
if (appConsent == null) {
/*
Permet de récupérer l'instance de AppConsent ou null si elle n'a pas encore été instancié par exemple
*/
appConsent = AppConsentSDK.getInstance()
}
// Pour être sécure
appConsent?.let { appConsentInstance ->
tryToDisplayCmpIfNeeded(appConsentInstance)
}
}
}
/**
* Cette méthode n'est pas intégrer dans cette exemple, car elle n'a pas réellement besoin d'être utilisée.
*
* L'initialisation du SDK fait de lui même la vérification au démarrage si sa dernière initialisation remonte à plus de 30 minutes.
*
* Les seules conditions pour utiliser cette méthode serait si:
* - vous avez configurer votre Notice en sélectionnant cette option : Lors de l'enregistrement des modifications de la notice, afficher la notice à tous les visiteurs.
* - Vous pensez mettre à jour souvent votre Notice (plus souvent que la : Période de conservation des consentements configurable dans votre Notice)
* - Vos utilisateurs relancent très rarement votre application (et donc ne passent pas par la vérification d'initialisation plus haut)
*
* Au quel cas, utiliser cette méthode ponctuellement peut être une solution.
*
* Mais nous vous encourageons à laisser le SDK gérer cette partie par lui-même.
*
*/
private fun checkIfNoticeHasBeenUpdated(appConsent: AppConsent) {
appConsent.checkForUpdate({ isNeedToPresentTheCmp: Boolean ->
// Votre Notice a été mise à jour, vous devez représenter la CMP à vos utilisateurs
if (true == isNeedToPresentTheCmp) {
/*
Permet de supprimer localement l'ancien consentement utilisateur.
Cette étape n'est pas obligatoire, mais elle permet d'éviter de refaire un appel réseau
pour vérifier plus tard si la Notice a été mise à jour
car plus aucuns consentement ne sera présent sur le device de l'utilisateur.
*/
appConsent.clearConsent()
tryToDisplayCMP(appConsent)
} else {
/*
La Notice est la même que lors de la dernière vérification
(vous n'avez apporté aucunes modification depuis le board ou
celle-ci n'a pas subit de mise à jour interne par nos soins;
comme par exemple la mise à jour d'un vendor)
*/
}
}) { _: Throwable? ->
/*
Une erreur s'est produite
*/
}
}
/**
* Essaye d'afficher la CMP
*
* @return true, si la CMP s'affiche, false sinon
*/
private fun tryToDisplayCMP(appConsent: AppConsent): Boolean {
/*
Essaye d'afficher la CMP selon certaines règles.
*/
return appConsent.tryToDisplayNotice(false)
}
private fun tryToDisplayCmpIfNeeded(appConsent: AppConsent) {
/*
Dans un premier temps, essaye d'afficher la CMP selon certaines règles.
*/
if (false == tryToDisplayCMP(appConsent)) {
/*
L'utilisateur a déjà donné son consentement;
L'utilisateur ne fait pas partie d'une zone sujet à l'application des RGPD;
etc.
*/
}
}
/*
Initialise le module de plateforme de gestion des consentements, lors de la création de l'activity
*/
private fun initCmpModule() {
/*
ACConfiguration permet de configurer la CMP.
Dans l'exemple ici:
- On défini forceApplyGDPR à true pour afficher la CMP quelque soit la région des utilisateurs.
- On décide d'afficher la CMP en FullScreen plutôt qu'en modal.
- On configure la CMP pour que les boutons du layer 1 s'affichent verticalement et non pas horizontalement (sauf en mode paysage)
*/
val acConfiguration = ACConfiguration.Builder()
.setForceApplyGDPR(true)
.setFullScreenMode(true)
.setNeedToDisplayValidationButtonsVertically(isNeedToDisplayButtonsAtVertical = true)
.build()
AppConsentSDK.initialize(
appKey = "YOUR_APP_KEY",
configuration = acConfiguration
) { appConsentInitialized ->
/*
Pour éviter certains problèmes, utilisez l'instance reçue par le callback onReady
Celle-ci a été initialisée avec succès
*/
appConsent = appConsentInitialized
/*
S'enregistre au callback de la CMP pour savoir quand l'utilisateur
aura donné son consentement, ou bien si une erreur survînt
*/
appConsentInitialized.setOnPresentNoticeListener(object : OnPresentNoticeListener {
override fun presentConsentError(error: Throwable?) {
/*
Une erreur s'est produite
*/
removeCMPCallback(appConsentInitialized)
}
override fun presentConsentGiven() {
/*
L'utilisateur a donné son consentement
*/
updateFirebaseConsent(appConsentInitialized)
removeCMPCallback(appConsentInitialized)
}
})
tryToDisplayCmpIfNeeded(appConsentInitialized)
}
}
private fun removeCMPCallback(appConsent: AppConsent) {
/*
Non obligatoire, mais cela permet d'éviter de garder une référence locale au callback.
Bien entendu, tout dépend de l'implémentation faite sur votre projet.
Exemple avec une SOP Activity, un singleton surveillé par un flow, etc.
*/
appConsent.setOnPresentNoticeListener(null)
}
private fun updateFirebaseConsent(appConsent: AppConsent) {
// Le consentement vient d'être validé par l'utilisateur
// Récupère l'état actuel du GCM (Google Consent Mode)
val gcmConsentStatus = appConsent.getGCMConsentStatus()
val newAnalyticsStorage =
if (gcmConsentStatus.isAnalyticsStorageGranted) GRANTED else DENIED
val newAdStorage =
if (gcmConsentStatus.isAdStorageGranted) GRANTED else DENIED
val newAdUserData =
if (gcmConsentStatus.isAdUserDataGranted) GRANTED else DENIED
val newAdPersonalization =
if (gcmConsentStatus.isAdPersonalizationGranted) GRANTED else DENIED
/*
* Nous ne garantissons pas que Firebase fonctionnera avec cet exemple.
* Veuillez vous référer à la documentation officielle pour plus de détails sur l'initialisation, la réinitialisation, le redémarrage et d'autres conditions.
*
* Cet exemple est uniquement destiné à montrer comment récupérer ConsentStatus et le définir pour votre instance Firebase.
*/
// Mettre à jour le statut de Firebase avec les informations fournies par le SDK
Firebase.analytics.setConsent {
analyticsStorage(newAnalyticsStorage)
adStorage(newAdStorage)
adUserData(newAdUserData)
adPersonalization(newAdPersonalization)
}
}
}
import com.sfbx.appconsent.core.model.gcm.GCMStatus;
import com.sfbx.appconsentv3.AppConsent;
import com.sfbx.appconsentv3.ui.AppConsentSDK;
import com.sfbx.appconsentv3.ui.listener.OnPresentNoticeListener;
import com.sfbx.appconsentv3.ui.model.ACConfiguration;
public class MainActivity extends AppCompatActivity {
private AppConsent appConsent = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button_display_second_activity).setOnClickListener(v -> {
startActivity(new Intent(this, SecondActivity.class));
});
/*
Permet de savoir si le SDK a dors et déjà été initialisé
*/
if (!AppConsentSDK.isSdkInitialized() || AppConsentSDK.getInstance() == null) {
initCmpModule();
} else {
if (appConsent == null) {
/*
Permet de récupérer l'instance de AppConsent ou null si elle n'a pas encore été instancié par exemple
*/
appConsent = AppConsentSDK.getInstance();
}
// Pour être sécure
if(appConsent != null){
tryToDisplayCmpIfNeeded(appConsent);
}
}
}
/**
* Cette méthode n'est pas intégrer dans cette exemple, car elle n'a pas réellement besoin d'être utilisée.
*
* L'initialisation du SDK fait de lui même la vérification au démarrage si sa dernière initialisation remonte à plus de 30 minutes.
*
* Les seules conditions pour utiliser cette méthode serait si:
* - vous avez configurer votre Notice en sélectionnant cette option : Lors de l'enregistrement des modifications de la notice, afficher la notice à tous les visiteurs.
* - Vous pensez mettre à jour souvent votre Notice (plus souvent que la : Période de conservation des consentements configurable dans votre Notice)
* - Vos utilisateurs relancent très rarement votre application (et donc ne passent pas par la vérification d'initialisation plus haut)
*
* Au quel cas, utiliser cette méthode ponctuellement peut être une solution.
*
* Mais nous vous encourageons à laisser le SDK gérer cette partie par lui-même.
*
*/
private void checkIfNoticeHasBeenUpdated(@NonNull final AppConsent appConsent) {
appConsent.checkForUpdate(isNeedToPresentTheCmp -> {
// Votre Notice a été mise à jour, vous devez représenter la CMP à vos utilisateurs
if (true == isNeedToPresentTheCmp) {
/*
Permet de supprimer localement l'ancien consentement utilisateur.
Cette étape n'est pas obligatoire, mais elle permet d'éviter de refaire un appel réseau
pour vérifier plus tard si la Notice a été mise à jour
car plus aucuns consentement ne sera présent sur le device de l'utilisateur.
*/
appConsent.clearConsent();
tryToDisplayCMP(appConsent);
} else {
/*
La Notice est la même que lors de la dernière vérification
(vous n'avez apporté aucunes modification depuis le board ou
celle-ci n'a pas subit de mise à jour interne par nos soins;
comme par exemple la mise à jour d'un vendor)
*/
}
return Unit.INSTANCE;
}, error -> {
/*
Une erreur s'est produite
*/
return Unit.INSTANCE;
});
}
/**
* Essaye d'afficher la CMP
*
* @return true, si la CMP s'affiche, false sinon
*/
private Boolean tryToDisplayCMP(@NonNull final AppConsent appConsent) {
/*
Essaye d'afficher la CMP selon certaines règles.
*/
return appConsent.tryToDisplayNotice(false);
}
private void tryToDisplayCmpIfNeeded(@NonNull final AppConsent appConsent) {
/*
Dans un premier temps, essaye d'afficher la CMP selon certaines règles.
*/
if (false == tryToDisplayCMP(appConsent)) {
/*
L'utilisateur a déjà donné son consentement;
L'utilisateur ne fait pas partie d'une zone sujet à l'application des RGPD;
etc.
*/
}
}
/*
Initialise le module de plateforme de gestion des consentements, lors de la création de l'activity
*/
private void initCmpModule() {
/*
ACConfiguration permet de configurer la CMP.
Dans l'exemple ici:
- On défini forceApplyGDPR à true pour afficher la CMP quelque soit la région des utilisateurs.
- On décide d'afficher la CMP en FullScreen plutôt qu'en modal.
- On configure la CMP pour que les boutons du layer 1 s'affichent verticalement et non pas horizontalement (sauf en mode paysage)
*/
final ACConfiguration acConfiguration = new ACConfiguration.Builder()
.setForceApplyGDPR(true)
.setFullScreenMode(true)
.setNeedToDisplayValidationButtonsVertically(true)
.build();
AppConsentSDK.initialize(
"YOUR_APP_KEY",
acConfiguration,
appConsentInitialized -> {
/*
Pour éviter certains problèmes, utilisez l'instance reçue par le callback onReady
Celle-ci a été initialisée avec succès
*/
appConsent = appConsentInitialized;
/*
S'enregistre au callback de la CMP pour savoir quand l'utilisateur
aura donné son consentement, ou bien si une erreur survînt
*/
appConsent.setOnPresentNoticeListener(new OnPresentNoticeListener() {
@Override
public void presentConsentError(@NonNull Throwable error) {
/*
Une erreur s'est produite
*/
removeCMPCallback(appConsent);
}
@Override
public void presentConsentGiven() {
/*
L'utilisateur a donné son consentement
*/
updateFirebaseConsent(appConsent);
removeCMPCallback(appConsent);
}
});
tryToDisplayCmpIfNeeded(appConsent);
return Unit.INSTANCE;
});
}
private void removeCMPCallback(@NonNull final AppConsent appConsent) {
/*
Non obligatoire, mais cela permet d'éviter de garder une référence locale au callback.
Bien entendu, tout dépend de l'implémentation faite sur votre projet.
Exemple avec une SOP Activity, un singleton surveillé par un flow, etc.
*/
appConsent.setOnPresentNoticeListener(null);
}
private void updateFirebaseConsent(@NonNull final AppConsent appConsent) {
// Le consentement vient d'être validé par l'utilisateur
// Récupère l'état actuel du GCM (Google Consent Mode)
final GCMStatus gcmConsentStatus = appConsent.getGCMConsentStatus();
final FirebaseAnalytics.ConsentStatus newAnalyticsStorage;
if (gcmConsentStatus.isAnalyticsStorageGranted()) {
newAnalyticsStorage = GRANTED;
} else {
newAnalyticsStorage = DENIED;
}
final FirebaseAnalytics.ConsentStatus newAdStorage;
if (gcmConsentStatus.isAdStorageGranted()) {
newAdStorage = GRANTED;
} else {
newAdStorage = DENIED;
}
final FirebaseAnalytics.ConsentStatus newAdUserData;
if (gcmConsentStatus.isAdUserDataGranted()) {
newAdUserData = GRANTED;
} else {
newAdUserData = DENIED;
}
final FirebaseAnalytics.ConsentStatus newAdPersonalization;
if (gcmConsentStatus.isAdPersonalizationGranted()) {
newAdPersonalization = GRANTED;
} else {
newAdPersonalization = DENIED;
}
// Mettre à jour le statut de Firebase avec les informations fournies par le SDK
HashMap<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentSettings =
new HashMap<>();
consentSettings.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, newAnalyticsStorage);
consentSettings.put(FirebaseAnalytics.ConsentType.AD_STORAGE, newAdStorage);
consentSettings.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, newAdUserData);
consentSettings.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, newAdPersonalization);
/*
* Nous ne garantissons pas que Firebase fonctionnera avec cet exemple.
* Veuillez vous référer à la documentation officielle pour plus de détails sur l'initialisation, la réinitialisation, le redémarrage et d'autres conditions.
*
* Cet exemple est uniquement destiné à montrer comment récupérer ConsentStatus et le définir pour votre instance Firebase.
*/
// Mettre à jour le statut de Firebase avec les informations fournies par le SDK
FirebaseAnalytics.getInstance(this).setConsent(consentSettings);
}
}
Descriptif complet de l'exemple d'intégration ci-dessous
Dans cet exemple nous nous assurons de l'affichage de la CMP aux utilisateurs au lancement de l'application (démarrage de notre activité).
Voici les différentes étapes de cet exemple au premier lancement
- Vérification du SDK si celui-ci à déjà été initialisé (retour à false)
- Initialisation de la CMP avec l'appel de AppConsentSDK#initialize dans le cas contraire
- Une fois le SDK démarré, enregistrement des callbacks permettant de savoir quand l'utilisateur aura fini de saisir ses informations.
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire. (dans l'exemple elle s'affichera)
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (retour à true)
- Une fois le consentement donnée par l'utilisateur, la méthode #presentConsentGiven sera appelé et vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
Voici les différentes étapes de cet exemple au lancement suivant (en ayant tué l'application)
- Vérification du SDK si celui-ci à déjà été initialisé (retour à false)
- Initialisation de la CMP avec l'appel de AppConsentSDK#initialize dans le cas contraire
- Une fois le SDK démarré, enregistrement des callbacks permettant de savoir quand l'utilisateur aura fini de saisir ses informations.
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire.
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (résultat à false)
- (Par vous même) Essayez d'appeller la méthode #checkForUpdate pour vérifier si la Notice a été mise à jour depuis votre Dashboard (sauf action de votre part, résultat à false)
- Aucunes action n'est nécessaire, vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
Voici les différentes étapes de cet exemple au lancement suivant (en quittant l'application et en la remettant en avant sans la tuée)
- Vérification du SDK si celui-ci à déjà été initialisé (retour à true)
- Récupération de l'instance pour l'utiliser localement dans notre activity
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire.
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (résultat à false)
- (Par vous même) Essayez d'appeller la méthode #checkForUpdate pour vérifier si la Notice a été mise à jour depuis votre Dashboard (sauf action de votre part, résultat à false)
- Aucunes action n'est nécessaire, vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
Voici les différentes étapes de cet exemple au lancement suivant ET après avoir modifié votre Notice depuis le Dashboard (en quittant l'application et en la remettant en avant sans la tuée)
- Vérification du SDK si celui-ci à déjà été initialisé (retour à true)
- Récupération de l'instance pour l'utiliser localement dans notre activity
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire.
- vérification du retour de #tryToDisplayNotice(false) qui permet de savoir si la CMP c'est affiché ou non (résultat à false)
- (Par vous même) Essayez d'appeller la méthode #checkForUpdate pour vérifier si la Notice a été mise à jour depuis votre Dashboard (résultat à true car votre Notice a été mise à jour)
- Suppression local du précédent consentement utilisateur #clearConsent
- Appel de la méthode #tryToDisplayNotice(false) qui permet d'afficher la CMP seulement si c'est nécessaire. (retour à true)
- Une fois le consentement donnée par l'utilisateur, la méthode #presentConsentGiven sera appelé et vous pouvez par exemple démarrer votre SDK de PUB (AdMob, Vungle, Amazon mobile Ads, etc.)
- Kotlin
- Java
import com.sfbx.appconsent.core.model.gcm.GCMStatus
import com.sfbx.appconsent.AppConsent
import com.sfbx.appconsent.tv.AppConsentSDK
import com.sfbx.appconsent.tv.listener.OnPresentNoticeListener
import com.sfbx.appconsent.tv.model.ACConfiguration
import com.sfbx.appconsent.tv.model.error.ACError
class MainActivity : AppCompatActivity() {
private var appConsent: AppConsent? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/*
Permet de savoir si le SDK a dors et déjà été initialisé
*/
if (!AppConsentSDK.isSdkInitialized() || AppConsentSDK.getInstance() == null) {
initCmpModule()
} else {
if (appConsent == null) {
/*
Permet de récupérer l'instance de AppConsent ou null si elle n'a pas encore été instancié par exemple
*/
appConsent = AppConsentSDK.getInstance()
}
// Pour être sécure
appConsent?.let { appConsentInstance ->
tryToDisplayCmpIfNeeded(appConsentInstance)
}
}
}
/**
* Cette méthode n'est pas intégrer dans cette exemple, car elle n'a pas réellement besoin d'être utilisée.
*
* L'initialisation du SDK fait de lui même la vérification au démarrage si sa dernière initialisation remonte à plus de 30 minutes.
*
* Les seules conditions pour utiliser cette méthode serait si:
* - vous avez configurer votre Notice en sélectionnant cette option : Lors de l'enregistrement des modifications de la notice, afficher la notice à tous les visiteurs.
* - Vous pensez mettre à jour souvent votre Notice (plus souvent que la : Période de conservation des consentements configurable dans votre Notice)
* - Vos utilisateurs relancent très rarement votre application (et donc ne passent pas par la vérification d'initialisation plus haut)
*
* Au quel cas, utiliser cette méthode ponctuellement peut être une solution.
*
* Mais nous vous encourageons à laisser le SDK gérer cette partie par lui-même.
*
*/
private fun checkIfNoticeHasBeenUpdated(appConsent: AppConsent) {
appConsent.checkForUpdate({ isNeedToPresentTheCmp: Boolean ->
// Votre Notice a été mise à jour, vous devez représenter la CMP à vos utilisateurs
if (true == isNeedToPresentTheCmp) {
/*
Permet de supprimer localement l'ancien consentement utilisateur.
Cette étape n'est pas obligatoire, mais elle permet d'éviter de refaire un appel réseau
pour vérifier plus tard si la Notice a été mise à jour
car plus aucuns consentement ne sera présent sur le device de l'utilisateur.
*/
appConsent.clearConsent()
tryToDisplayCMP(appConsent)
} else {
/*
La Notice est la même que lors de la dernière vérification
(vous n'avez apporté aucunes modification depuis le board ou
celle-ci n'a pas subit de mise à jour interne par nos soins;
comme par exemple la mise à jour d'un vendor)
*/
}
}) { _: Throwable? ->
/*
Une erreur s'est produite
*/
}
}
/**
* Essaye d'afficher la CMP
*
* @return true, si la CMP s'affiche, false sinon
*/
private fun tryToDisplayCMP(appConsent: AppConsent): Boolean {
/*
Essaye d'afficher la CMP selon certaines règles.
*/
return appConsent.tryToDisplayNotice(false)
}
private fun tryToDisplayCmpIfNeeded(appConsent: AppConsent) {
/*
Dans un premier temps, essaye d'afficher la CMP selon certaines règles.
*/
if (false == tryToDisplayCMP(appConsent)) {
/*
L'utilisateur a déjà donné son consentement;
L'utilisateur ne fait pas partie d'une zone sujet à l'application des RGPD;
etc.
*/
}
}
/*
Initialise le module de plateforme de gestion des consentements, lors de la création de l'activity
*/
private fun initCmpModule() {
/*
ACConfiguration permet de configurer la CMP.
Dans l'exemple ici:
- On défini forceApplyGDPR à true pour afficher la CMP quelque soit la région des utilisateurs.
*/
val acConfiguration = ACConfiguration.Builder()
.setForceApplyGDPR(true)
.build()
AppConsentSDK.initialize(
appKey = "YOUR_APP_KEY",
configuration = acConfiguration
) { appConsentInitialized ->
/*
Pour éviter certains problèmes, utilisez l'instance reçue par le callback onReady
Celle-ci a été initialisée avec succès
*/
appConsent = appConsentInitialized
/*
S'enregistre au callback de la CMP pour savoir quand l'utilisateur
aura donné son consentement, ou bien si une erreur survînt
*/
appConsentInitialized.setOnPresentNoticeListener(object : OnPresentNoticeListener {
override fun presentConsentError(error: ACError) {
/*
Une erreur s'est produite
*/
removeCMPCallback(appConsentInitialized)
}
override fun presentConsentGiven() {
/*
L'utilisateur a donné son consentement
*/
updateFirebaseConsent(appConsentInitialized)
removeCMPCallback(appConsentInitialized)
}
})
tryToDisplayCmpIfNeeded(appConsentInitialized)
}
}
private fun removeCMPCallback(appConsent: AppConsent) {
/*
Non obligatoire, mais cela permet d'éviter de garder une référence locale au callback.
Bien entendu, tout dépend de l'implémentation faite sur votre projet.
Exemple avec une SOP Activity, un singleton surveillé parc un flow, etc.
*/
appConsent.setOnPresentNoticeListener(null)
}
private fun updateFirebaseConsent(appConsent: AppConsent) {
// Le consentement vient d'être validé par l'utilisateur
// Récupère l'état actuel du GCM (Google Consent Mode)
val gcmConsentStatus = appConsent.getGCMConsentStatus()
val newAnalyticsStorage =
if (gcmConsentStatus.isAnalyticsStorageGranted) GRANTED else DENIED
val newAdStorage =
if (gcmConsentStatus.isAdStorageGranted) GRANTED else DENIED
val newAdUserData =
if (gcmConsentStatus.isAdUserDataGranted) GRANTED else DENIED
val newAdPersonalization =
if (gcmConsentStatus.isAdPersonalizationGranted) GRANTED else DENIED
/*
* Nous ne garantissons pas que Firebase fonctionnera avec cet exemple.
* Veuillez vous référer à la documentation officielle pour plus de détails sur l'initialisation, la réinitialisation, le redémarrage et d'autres conditions.
*
* Cet exemple est uniquement destiné à montrer comment récupérer ConsentStatus et le définir pour votre instance Firebase.
*/
// Mettre à jour le statut de Firebase avec les informations fournies par le SDK
Firebase.analytics.setConsent {
analyticsStorage(newAnalyticsStorage)
adStorage(newAdStorage)
adUserData(newAdUserData)
adPersonalization(newAdPersonalization)
}
}
}
import com.sfbx.appconsent.core.model.gcm.GCMStatus;
import com.sfbx.appconsent.AppConsent;
import com.sfbx.appconsent.tv.AppConsentSDK;
import com.sfbx.appconsent.tv.listener.OnPresentNoticeListener;
import com.sfbx.appconsent.tv.model.ACConfiguration;
import com.sfbx.appconsent.tv.model.error.ACError;
public class MainActivity extends AppCompatActivity {
private AppConsent appConsent = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
Permet de savoir si le SDK a dors et déjà été initialisé
*/
if (!AppConsentSDK.isSdkInitialized() || AppConsentSDK.getInstance() == null) {
initCmpModule();
} else {
if (appConsent == null) {
/*
Permet de récupérer l'instance de AppConsent ou null si elle n'a pas encore été instancié par exemple
*/
appConsent = AppConsentSDK.getInstance();
}
// Pour être sécure
if(appConsent != null){
tryToDisplayCmpIfNeeded(appConsent);
}
}
}
/**
* Cette méthode n'est pas intégrer dans cette exemple, car elle n'a pas réellement besoin d'être utilisée.
*
* L'initialisation du SDK fait de lui même la vérification au démarrage si sa dernière initialisation remonte à plus de 30 minutes.
*
* Les seules conditions pour utiliser cette méthode serait si:
* - vous avez configurer votre Notice en sélectionnant cette option : Lors de l'enregistrement des modifications de la notice, afficher la notice à tous les visiteurs.
* - Vous pensez mettre à jour souvent votre Notice (plus souvent que la : Période de conservation des consentements configurable dans votre Notice)
* - Vos utilisateurs relancent très rarement votre application (et donc ne passent pas par la vérification d'initialisation plus haut)
*
* Au quel cas, utiliser cette méthode ponctuellement peut être une solution.
*
* Mais nous vous encourageons à laisser le SDK gérer cette partie par lui-même.
*
*/
private void checkIfNoticeHasBeenUpdated(@NonNull final AppConsent appConsent) {
appConsent.checkForUpdate(isNeedToPresentTheCmp -> {
// Votre Notice a été mise à jour, vous devez représenter la CMP à vos utilisateurs
if (true == isNeedToPresentTheCmp) {
/*
Permet de supprimer localement l'ancien consentement utilisateur.
Cette étape n'est pas obligatoire, mais elle permet d'éviter de refaire un appel réseau
pour vérifier plus tard si la Notice a été mise à jour
car plus aucuns consentement ne sera présent sur le device de l'utilisateur.
*/
appConsent.clearConsent();
tryToDisplayCMP(appConsent);
} else {
/*
La Notice est la même que lors de la dernière vérification
(vous n'avez apporté aucunes modification depuis le board ou
celle-ci n'a pas subit de mise à jour interne par nos soins;
comme par exemple la mise à jour d'un vendor)
*/
}
return Unit.INSTANCE;
}, error -> {
/*
Une erreur s'est produite
*/
return Unit.INSTANCE;
});
}
/**
* Essaye d'afficher la CMP
*
* @return true, si la CMP s'affiche, false sinon
*/
private Boolean tryToDisplayCMP(@NonNull final AppConsent appConsent) {
/*
Essaye d'afficher la CMP selon certaines règles.
*/
return appConsent.tryToDisplayNotice(false);
}
private void tryToDisplayCmpIfNeeded(@NonNull final AppConsent appConsent) {
/*
Dans un premier temps, essaye d'afficher la CMP selon certaines règles.
*/
if (false == tryToDisplayCMP(appConsent)) {
/*
L'utilisateur a déjà donné son consentement;
L'utilisateur ne fait pas partie d'une zone sujet à l'application des RGPD;
etc.
*/
}
}
/*
Initialise le module de plateforme de gestion des consentements, lors de la création de l'activity
*/
private void initCmpModule() {
/*
ACConfiguration permet de configurer la CMP.
Dans l'exemple ici:
- On défini forceApplyGDPR à true pour afficher la CMP quelque soit la région des utilisateurs.
*/
final ACConfiguration acConfiguration = new ACConfiguration.Builder()
.setForceApplyGDPR(true)
.build();
AppConsentSDK.initialize(
"YOUR_APP_KEY",
acConfiguration,
appConsentInitialized -> {
/*
Pour éviter certains problèmes, utilisez l'instance reçue par le callback onReady
Celle-ci a été initialisée avec succès
*/
appConsent = appConsentInitialized;
/*
S'enregistre au callback de la CMP pour savoir quand l'utilisateur
aura donné son consentement, ou bien si une erreur survînt
*/
appConsent.setOnPresentNoticeListener(new OnPresentNoticeListener() {
@Override
public void presentConsentError(@NonNull ACError acError) {
/*
Une erreur s'est produite
*/
removeCMPCallback(appConsent);
}
@Override
public void presentConsentGiven() {
/*
L'utilisateur a donné son consentement
*/
updateFirebaseConsent(appConsent);
removeCMPCallback(appConsent);
}
});
tryToDisplayCmpIfNeeded(appConsent);
return Unit.INSTANCE;
});
}
private void removeCMPCallback(@NonNull final AppConsent appConsent) {
/*
Non obligatoire, mais cela permet d'éviter de garder une référence locale au callback.
Bien entendu, tout dépend de l'implémentation faite sur votre projet.
Exemple avec une SOP Activity, un singleton surveillé par un flow, etc.
*/
appConsent.setOnPresentNoticeListener(null);
}
private void updateFirebaseConsent(@NonNull final AppConsent appConsent) {
// Le consentement vient d'être validé par l'utilisateur
// Récupère l'état actuel du GCM (Google Consent Mode)
final GCMStatus gcmConsentStatus = appConsent.getGCMConsentStatus();
final FirebaseAnalytics.ConsentStatus newAnalyticsStorage;
if (gcmConsentStatus.isAnalyticsStorageGranted()) {
newAnalyticsStorage = GRANTED;
} else {
newAnalyticsStorage = DENIED;
}
final FirebaseAnalytics.ConsentStatus newAdStorage;
if (gcmConsentStatus.isAdStorageGranted()) {
newAdStorage = GRANTED;
} else {
newAdStorage = DENIED;
}
final FirebaseAnalytics.ConsentStatus newAdUserData;
if (gcmConsentStatus.isAdUserDataGranted()) {
newAdUserData = GRANTED;
} else {
newAdUserData = DENIED;
}
final FirebaseAnalytics.ConsentStatus newAdPersonalization;
if (gcmConsentStatus.isAdPersonalizationGranted()) {
newAdPersonalization = GRANTED;
} else {
newAdPersonalization = DENIED;
}
// Mettre à jour le statut de Firebase avec les informations fournies par le SDK
HashMap<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentSettings =
new HashMap<>();
consentSettings.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, newAnalyticsStorage);
consentSettings.put(FirebaseAnalytics.ConsentType.AD_STORAGE, newAdStorage);
consentSettings.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, newAdUserData);
consentSettings.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, newAdPersonalization);
/*
* Nous ne garantissons pas que Firebase fonctionnera avec cet exemple.
* Veuillez vous référer à la documentation officielle pour plus de détails sur l'initialisation, la réinitialisation, le redémarrage et d'autres conditions.
*
* Cet exemple est uniquement destiné à montrer comment récupérer ConsentStatus et le définir pour votre instance Firebase.
*/
// Mettre à jour le statut de Firebase avec les informations fournies par le SDK
FirebaseAnalytics.getInstance(this).setConsent(consentSettings);
}
}