Aller au contenu principal

Unity

Notre CMP est disponible pour Unity sous forme d'un Package Unity contenant les plugins pour Android, iOS et tvOS. Le package se trouve à l'adresse ci-dessous:

AppConsent Unity package

Le package supporte la version Unity minimum 2021.3.16f1 LTS.


Exécution simple

Unity exemple

Cet exemple est pris directement de l'exemple de code ci-dessous.

Exemple Runner

Voici l'exemple de projet Runner Unity dans lequel nous avons intégré notre solution. Sample

Exemple de développeur

Voici un exemple de projet Unity dans lequel nous avons intégré notre solution, vous permettant d'interagir directement avec elle depuis l'écran principal. Exemple

Ajouter le package à votre projet Unity

Depuis le menu window, ouvrez le Package Manager

Ouvrir le Package Manager

Sur la fenêtre du Package Manager, séléctionnez le bouton + en haut à gauche. Dans le menu déroulant séléctionnez Add package from git URL.

Add package from git URL

Dans le champs texte, rentrez l'url git du package https://gitlab.datalf.chat/customers/appconsent-unity.git et cliquez sur Add.

Type URL package

Le package est désormais ajouté à votre projet.

SFBX AppConsent package


Recommendation Android

Le plugin vous donne la possibilité de définir un callback de succès ou d'erreur avant l'initialisation de la CMP qui vous permettra de Logger et/ou d'utiliser la CMP quand celle-ci est complètement initialisé (asynchrone).

Voici un exemple de fonctionnement pour la CMP sur Android

using SFBX.AppConsent;
using UnityEngine;
using System.Collections;

public class AppConsentGUI : MonoBehaviour, ISDKCallbackListener, ISDKPresentNoticeListener
{
ACNotice bridge = null;
private bool isCmpInitialized = false;
int centerX = Screen.width / 2;
int buttonWidth = Screen.width / 2;
int buttonHeight = Screen.height / 14;
int buttonX;

GUIStyle labelStyle = new GUIStyle();
GUIStyle buttonStyle;

string status = "";
int logIndice = 0;

void Awake()
{
AndroidJNIHelper.debug = true;
// Only for Android - does not impact iOS !
ACNotice.SetNoticeCallback(this);
bridge = new ACNotice("18ecaea4-554a-4f74-9242-520fe62058a8");
UpdateStatus("bridge instanciated => " + bridge);
}

// Start is called before the first frame update
void Start()
{
labelStyle.alignment = TextAnchor.MiddleCenter;
labelStyle.normal.textColor = Color.white;
buttonX = centerX - ( buttonWidth / 2);

bridge.InitACNotice();

#if UNITY_IOS || UNITY_TVOS
// On iOS, there's no need for a callback, so you can directly change the boolean's state.
OnReadyOnSuccess();
#endif
}

// Update is called once per frame
void Update()
{
centerX = Screen.width / 2;
buttonWidth = Screen.width / 2;
buttonHeight = Screen.height / 14;
buttonX = centerX - ( buttonWidth / 2);
}

void OnGUI()
{
labelStyle.fontSize = 28;
labelStyle.wordWrap = true;

buttonStyle = new GUIStyle(GUI.skin.button);
buttonStyle.fontSize = 28;

GUI.Label(new Rect(buttonX, buttonHeight * 2, buttonWidth, buttonHeight), "SFBX AppConsent", labelStyle);

if (GUI.Button(new Rect(buttonX, buttonHeight * 4, buttonWidth, buttonHeight), "Display CMP", buttonStyle))
{
if(isCmpInitialized == true && bridge != null){
bridge.SetPresentNoticeListener(this);
bool isDisplayed = bridge.ShowNotice();
if(isDisplayed == true){
UpdateStatus("Notice displayed");
}else{
UpdateStatus("Notice not displayed, look at your consent or RGPD country.");
}
}else{
UpdateStatus("AppConsent not ready yet");
}
}

if (GUI.Button(new Rect(buttonX, buttonHeight * 6, buttonWidth, buttonHeight), "Settings", buttonStyle))
{
if(isCmpInitialized == true && bridge != null){
bridge.ShowSettings();
UpdateStatus("Settings displayed");
}else{
UpdateStatus("AppConsent not ready yet");
}
}

if (GUI.Button(new Rect(buttonX, buttonHeight * 8, buttonWidth, buttonHeight), "Check Consents", buttonStyle))
{
if(isCmpInitialized == true && bridge != null){
bool consent = bridge.ConsentGiven();
bool allConsentables = bridge.AllConsentablesAllowed();
bool gdpr = bridge.IsSubjectToGDPR();
bool acceptAll = bridge.UserAcceptAll();
bool extra = bridge.ExtraVendorAllowed("TobuM9Iw");
bool consentable = bridge.ConsentableAllowed(1,0);
UpdateStatus("consents: " + consent + allConsentables + gdpr + acceptAll + extra + consentable);
}else{
UpdateStatus("AppConsent not ready yet");
}
}

if (GUI.Button(new Rect(buttonX, buttonHeight * 10, buttonWidth, buttonHeight), "Reset Consents", buttonStyle))
{
if(isCmpInitialized == true && bridge != null){
bridge.ClearConsents();
UpdateStatus("Cleared consents");
}else{
UpdateStatus("AppConsent not ready yet");
}
}

GUI.Label(new Rect(0, buttonHeight * 12, Screen.width, buttonHeight), status, labelStyle);
}

public void OnReadyOnSuccess()
{
UpdateStatus("Appconsent onReadyOnSuccess");
isCmpInitialized = true;

Debug.Log("AppConsent is ready to be use !");
UpdateStatus("Setting listener + trying to show notice");
bridge.SetPresentNoticeListener(this);

bool isDisplayed = bridge.ShowNotice();
if(isDisplayed == true){
UpdateStatus("Notice displayed");
}else{
UpdateStatus("Notice not displayed, look at your consent or RGPD country.");
}
}

public void OnReadyOnError(AndroidJavaObject err)
{
isCmpInitialized = false;
Debug.LogError("Failed to start AppConsent");
}

public void OnConsentGiven()
{
Debug.Log("The user has given his consent");
UpdateStatus("Consent given !");
}

public void OnConsentGivenError(AndroidJavaObject err)
{
Debug.LogError("An error as occurred, please read Log.");
UpdateStatus("An error as occurred, please read Log.");
}

private void UpdateStatus(string log){
if(logIndice % 10 == 0){
status = logIndice++ + " - " + log;
}else{
status = status + "\n" + logIndice++ + " - " + log;
}
}
}

Exigence de Google

Cette information n'est utile que si votre application s'adresse à la fois aux enfants et à un public plus âgé.

info
Politique de confidentialité
Il peut être nécessaire de mettre en place un écran neutre pour l'âge dans votre application si celle-ci s'adresse à la fois aux enfants ET à un public plus âgé.

Message de Google:
Les applications qui ciblent à la fois: les enfants et le public plus âgé ne doivent pas mettre en œuvre des API ou des SDK qui ne sont pas approuvés pour une utilisation dans les services destinés aux enfants, à moins qu'ils ne soient utilisés derrière un écran d'âge neutre ou mis en œuvre d'une manière qui n'entraîne pas la collecte de données auprès des enfants.

Voici une liste de liens pour vous aider à comprendre les exigences de Google

Documentation de l'API

Notre documentation d'api détaillée est ici.

FAQ

Toute notre FAQ ce trouve directement sur notre git, dans le README