Intégration avancée du code d'intégration HTML (widget) via l'API
Code d'exemple de widget
<html>
<head>
<!-- Inclure les bundles -->
<script src="https://cdn-apps.drimify.com/prod/widget/index.js" type="text/javascript"></script>
<!-- Configurez le widget au chargement de la page -->
<script>
window.addEventListener('load', function () {
var widget = DigitaService.Widget.Create({
autoscroll: true,
element: 'gamification-widget',
engine: 'https://apps.drimify.com/Rf6aGmBR/',
fixed: false,
height:['auto'],
sharingurl: 'https://apps.drimify.com/Rf6aGmBR/',
width: '100%',
});
widget.onReady = function (event) {};
widget.onComplete = function (event) {};
widget.onFirstInteraction = function () {};
widget.onRouteChange = function (event) {};
widget.onScrollToTop = function () {};
widget.onClose = function () {};
widget.onError = function (errorEvent) {};
widget.load();
});
</script>
</head>
<body>
<div id="gamification-widget"></div>
</body>
</html>
Configuration
Créez un widget en passant un objet Options à la fonction Create:
var widget = DigitaService.Widget.Create(options);Options de configuration
Obligatoire
Option | Type | Description |
|---|---|---|
options.element | string - HTMLElement | Le widget sera inséré dans cet élément HTML. Vous pouvez passer un accès direct à un élément HTML existant ou fournir l'ID de cet élément sous forme de chaîne. Si vous ne fournissez pas cette propriété, il tentera de trouver un id “digitaservice-widget” sur la page. |
options.engine | string | L'URL absolue vers l'application qui sera chargée dans le widget. |
Optionnel
Option | Type | Par Défaut | Description |
|---|---|---|---|
options.height | string | auto | Avant d'avoir été chargé, le widget a une hauteur par défaut de zéro. Vous pouvez remplacer cela par une valeur fictive pour éviter que la page ne saute en fonction de l'endroit où le widget est utilisé sur la page parente. La valeur est en pixels comme “600px”. Lorsque options.fixed = true est utilisé, la valeur de hauteur sera fixée à la valeur fournie, introduisant des barres de défilement. |
options.autoscroll | boolean | true | Selon la longueur du contenu du widget et l'affichage de l'utilisateur, il peut être nécessaire que la page contenant le widget nécessite un défilement de la page hôte. Le comportement par défaut lorsqu'un utilisateur utilise le widget est de faire défiler la page hôte jusqu'en haut du widget pour améliorer l'utilisabilité. Pour désactiver cela, définissez autoscroll sur false. Cette propriété sera false si options.fixed est true. |
options.sharingurl | string | L'URL hébergeant contenant le widget | Lors de l'utilisation du partage social, c'est l'URL que les gens partageront sur les réseaux sociaux pour les amener à votre campagne. Si sharing est une chaîne vide, il utilisera la page d'hébergement (contenant le widget) comme URL. |
options.fixed | boolean | false | Habituellement, le widget changera de taille automatiquement pour s'adapter au contenu du moteur et éviter les barres de défilement. Si cette option est définie sur true, alors la hauteur du widget sera fixe et ne changera pas. En utilisant cette option, la valeur de options.height doit être définie sur autre chose que “auto”. Si la hauteur du moteur est supérieure à la valeur de hauteur, des barres de défilement seront utilisées pour naviguer. |
options.width | string | “100%” | La largeur du widget. Peut être définie avec une mesure CSS telle que “%” ou “px” par exemple. |
Charger
Une fois qu'un widget est configuré, vous devez le charger. Vous pouvez charger le widget à tout moment.
Remarque : Assurez-vous de configurer tous les callbacks ci-dessous avant de charger afin que vous puissiez capturer tout événement.
widget.load();Callbacks d'événements
onReady
Une fois que widget.load() a été appelé, cela chargera et initialisera le widget. Lorsque le widget a terminé ce processus, il invoquera un callback optionnel onReady.
widget.onReady = function (event) {
// chargé et prêt à l'utilisation
console.log(event.type); // “ready”
console.log(event.data); // {}
};
onError
Une fois que widget.load() a été appelé, cela chargera et initialisera le widget. Tout erreur fatale survenant après ce point invoquera un callback optionnel onError.
widget.onError = function (event) {
throw new Error(event.message);
};
onComplete
Une fois le jeu terminé et que l'utilisateur est sur le dernier écran. Il fournit aussi un objet de données décrivant ce qui s'est passé dans le jeu.
Remarque : si vous souhaitez agir sur cela, vous pourriez envisager d'utiliser un délai dans le callback pour que l'utilisateur ait le temps de lire l'écran de fin car cela se passe instantanément lors de l'atteinte du dernier écran. Vous pouvez aussi utiliser onClose.
widget.onComplete = function (event) {
console.log(event.type); // “complete”
console.log(event.data); // {}
console.log("Le score de l'utilisateur était" + event.data.gameMetrics.score);
};
onResize
Se produit lorsque le moteur est redimensionné, fournit la hauteur sous forme de valeur en pixels.
widget.onResize = function (event) {
console.log(event.type); // “resize”
console.log(event.data); // {}
console.log("Hauteur de l'application:" + event.data.height);
};
onFirstInteraction
Quand l'utilisateur interagit (touche/clic) avec l'application chargée pour la première fois.
widget.onFirstInteraction = function () {
console.log("L'utilisateur a interagi avec l'application pour la première fois");
};
onRouteChange
Se produit lorsque l'application a changé de route dans le widget. (Navigue entre les écrans). L'événement peut ou non contenir un objet de données selon le contexte.
widget.onRouteChange = function (event) {
console.log(event.type) // “routechange”
console.log(event.data) // {} ou undefined
console.log("L'utilisateur a navigué vers un nouvel écran");
};
onScrollToTop
Se produit lorsque l'application essaie de faire défiler vers le haut de la page. Peut être utilisé sur la page parente pour s'assurer que le défilement n'est pas déclenché (CORS) ou doit être ajusté. L'événement ne contient pas d'objet de données.
widget.onScrollToTop = function () {
console.log("Défilement vers le haut");
};
Métriques
Voici une liste des principales métriques qui peuvent être utilisées selon le type de jeu :
Clé | Description |
|---|---|
data.gameMetrics.CurrentAttempt | Le nombre de tentatives de l'utilisateur une fois qu'il a terminé le jeu. |
data.gameMetrics.prizeID | L'ID du gain. |
data.gameMetrics.prizeImage | L'image du lot. |
data.gameMetrics.prizeName | Le nom du lot. |
data.gameMetrics.prizeRef | La référence du gain. |
data.gameMetrics.totalPossibleAttempts | Le montant total de tentatives possibles. |
data.gameMetrics.userWon | true/false selon le statut de l'utilisateur. |
data.gameMetrics.score | Le montant total de points accumulés que cet utilisateur obtient en terminant le jeu. |
Informations d'identification
Clé | Description |
|---|---|
data.credentials.isPreviewMode | Vérifie si le jeu est en mode prévisualisation. |
data.credentials.projectID | L'ID de l'application en cours d'exécution. |
data.credentials.projectLanguage | La langue du projet dans le widget (en, fr). |
data.credentials.projectName | Le nom de l'application. |
data.credentials.projectType | Le type d'application (quiz, mémoire...). |
data.credentials.publisherID | L'ID de l'éditeur. |
data.credentials.sessionID | L'ID de session du joueur actuel. |
Gestion des erreurs
Il existe deux façons principales de détecter les erreurs et de récupérer des informations concernant les problèmes survenant dans le widget :
Callback onError
Le callback onError capture toutes les erreurs fatales qui se produisent après le chargement du widget. Cela peut être utile pour identifier quand une page n'existe pas ou si un échec critique survient.
widget.onError = function (event) {
if (typeof event.data.message !== 'undefined') {
switch (event.data.message) {
default:
// Ne rien faire
break;
case 'ERR_15':
console.log("Page inexistante");
break;
}
}
};
Callback onRouteChange
Le callback onRouteChange est déclenché lorsque l'application navigue entre différents écrans à l'intérieur du widget. Cela est utile pour suivre les erreurs liées à l'état de l'application et à la disponibilité du contenu.
widget.onRouteChange = function (event) {
if (typeof event.data.errorCode !== 'undefined') {
switch (event.data.errorCode) {
default:
// Ne rien faire
break;
case 'ERR_01':
console.log("Aucun forfait disponible");
break;
case 'ERR_02':
console.log("Contenu pas encore disponible");
break;
case 'ERR_03':
console.log("Contenu expiré");
break;
case 'ERR_04':
console.log("Plus de vues");
break;
case 'ERR_05':
console.log("Erreur de sécurité");
break;
case 'ERR_07':
console.log("Application non publiée");
break;
case 'ERR_08':
console.log("Application premium non disponible");
break;
case 'ERR_09':
console.log("Session Uid non détectée");
break;
case 'ERR_10':
console.log("Session Uid déjà utilisée");
break;
case 'ERR_11':
console.log("Plan non activé");
break;
case 'ERR_12':
console.log("Mauvaises données reçues");
break;
case 'ERR_13':
console.log("Échec de l'appel SSO");
break;
case 'ERR_14':
console.log("Langue indisponible");
break;
}
}
};
En utilisant à la fois onError et onRouteChange, vous pouvez suivre et gérer efficacement les problèmes qui pourraient survenir dans le widget, assurant ainsi une meilleure expérience utilisateur.
Récupération des informations de l'utilisateur à l'Écran de Fin (onRouteChange)
En utilisant Dynamic Path™, Advent Calendar, ou Combo™, vous pouvez récupérer les informations utilisateur à la fin de tout jeu via le callback onRouteChange.
Cette méthode est nécessaire car l'événement standard onComplete ne se déclenche qu'une fois l'expérience multi-étapes entièrement terminée, et non dès que chaque jeu intégré se termine.
Cela permet à votre système de recevoir les résultats complets du jeu (via gameInfo) lorsque l'utilisateur atteint l'écran de fin de l'expérience.
Configuration
Après avoir créé votre widget :
var widget = DigitaService.Widget.Create(options);
Ajoutez l'écouteur onRouteChange :
widget.onRouteChange = function (event) {
console.log(event.type); // "routechange"
console.log(event.data); // { ... } ou undefined
console.log("L'utilisateur a navigué vers un nouvel écran");
};
Détection de l'Écran de Fin
Quand l'utilisateur atteint l'écran de fin du jeu, le widget retournera une route correspondante :
event.data.screen === 'screen_end-VOTRE_APP_ID'
Remplacez VOTRE_APP_ID par l'ID réel de votre application.
Récupération des informations de l'utilisateur (gameInfo)
Une fois l'écran de fin détecté, vous pouvez extraire les données :
event.data.gameInfo
gameInfo contient un tableau des informations utilisateur, qui peut inclure :
- Données saisies par l'utilisateur
- Résultats ou scores du jeu
- Champs collectés durant l'expérience
Cette charge utile est seulement disponible sur l'écran de fin pour les expériences utilisées dans Dynamic Path, Advent Calendar, ou Combo.
Exemple
widget.onRouteChange = function (event) {
if (event.data && event.data.screen === 'screen_end-12345') {
const data = event.data.gameInfo;
console.log("Informations sur l'écran de fin :", data);
// Traiter ou transférer ces informations selon les besoins
}
};
Mis à jour le : 02/10/2026
Merci !
