Intégration avancée du code d'intégration HTML (widget) via l'API
Configuration
Créez un Widget en passant un objet Options à la fonction Create :
var widget = DigitaService.Widget.Create(options);
Options de Configuration
Obligatoires
Option | Type | Description |
|---|---|---|
options.element | string - HTMLElement | Le widget sera inséré dans cet élément HTML. Vous pouvez passer l'accès direct à un élément HTML existant ou fournir l'ID en chaîne de caractères pour cet élément. 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 de l'application qui sera chargée dans le widget. |
Optionnelles
Option | Type | Défaut | Description |
|---|---|---|---|
options.height | string | auto | Le widget a une hauteur par défaut de zéro avant d'être chargé. Vous pouvez remplacer cela par une valeur de remplacement pour éviter le saut de page, selon l'emplacement du widget dans la page parente. La valeur est en pixels comme “600px”. Lors de l'utilisation de options.fixed = true, la valeur de la hauteur sera verrouillée sur 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 de faire défiler la page hébergeant le widget. 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 faciliter l'utilisation. Pour désactiver cela, réglez autoscroll sur false. Cette propriété sera false si options.fixed est true. |
options.sharingurl | string | L'URL de la page hébergeant le widget | Lors de l'utilisation du partage sur les réseaux sociaux, c'est l'URL que les gens partageront pour amener d'autres utilisateurs à votre campagne. Si l'URL de partage est vide, elle utilisera la page hébergeant (contenant le widget) comme URL. |
options.fixed | boolean | false | En général, le widget s'adaptera automatiquement pour épouser le contenu du moteur et éviter les barres de défilement. Si cela est activé, la hauteur du widget restera fixe et ne changera pas. En utilisant cette option, la valeur options.height devrait ê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 comme “%” ou “px” par exemple. |
Chargement
Une fois le Widget configuré, vous devez le charger. Vous pouvez charger le widget à tout moment.
Note : Assurez-vous de paramétrer tous les callbacks ci-dessous avant de charger afin de pouvoir intercepter tout événement.
widget.load();
```# Callbacks d'événements
###### onReady
Une fois que *widget.load()* a été appelé, cela va charger et initialiser le widget. Lorsque le widget a terminé ce processus, il déclenchera un *onReady* callback optionnel.
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 va charger et initialiser le widget. Toute erreur fatale survenant après ce point déclenchera un *onError* callback optionnel.
widget.onError = function (event) {
throw new Error(event.message);
};
###### onComplete
Quand le jeu est terminé et que l'utilisateur voit l'écran final. Cela fournit également un *objet de données* décrivant ce qui s'est passé dans le jeu.
*Remarque : si vous souhaitez agir sur cela, vous pouvez envisager un délai d'attente à l'intérieur du callback pour que l'utilisateur ait le temps de lire l'Écran De Fin, puisqu'il apparaît instantanément en atteignant le dernier écran. Vous pouvez également utiliser onClose.*
widget.onComplete = function (event) {
console.log(event.type); // “complete”
console.log(event.data); // {}
console.log("Score de l'utilisateur : " + event.data.gameMetrics.score);
};
###### onResize
Se produit lorsque le moteur a redimensionné l'application, fournit la hauteur en valeur de 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 à l'intérieur du 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 exécuté (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");
};
# Statistiques
Voici une liste des principales mesures qui peuvent être utilisées selon le type de jeu :
| Clé | Description |
| ---- |
| **data.gameMetrics.CurrentAttempt** | Les essais réalisés par l'utilisateur une fois qu'il a terminé le jeu. |
| **data.gameMetrics.prizeID** | L'identifiant du prix. |
| **data.gameMetrics.prizeImage** | L'image du prix. |
| **data.gameMetrics.prizeName** | Le nom du prix. |
| **data.gameMetrics.prizeRef** | La référence du prix. |
| **data.gameMetrics.totalPossibleAttempts** | Le nombre total de tentatives possibles. |
| **data.gameMetrics.userWon** | vrai/faux selon le statut de l'utilisateur. |
| **data.gameMetrics.score** | Le nombre total de points accumulés que cet utilisateur a en complétant le jeu. |
###### Identifiants
| Clé | Description |
| ---- |
| **data.credentials.isPreviewMode** | Vérifiez si le jeu est en mode prévisualisation. |
| **data.credentials.projectID** | L'identifiant de l'application actuelle jouée. |
| **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émorisation...). |
| **data.credentials.publisherID** | L'identifiant du distributeur. |
| **data.credentials.sessionID** | L'identifiant de session du joueur actuel. |
# Gestion des erreurs
Il y a deux principales façons de détecter les erreurs et d'obtenir des informations sur les problèmes se produisant au sein du widget :## onError Callback
Le callback `onError` permet de capturer toute erreur fatale survenant après le chargement du widget. Cela peut être utile pour identifier si une page n'existe pas ou en cas d'échec critique.
```javascript
widget.onError = function (event) {
if (typeof event.data.message !== 'undefined') {
switch (event.data.message) {
default:
// Ne rien faire
break;
case 'ERR_15':
console.log("La page n'existe pas");
break;
}
}
};
onRouteChange Callback
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 non encore disponible");
break;
case 'ERR_03':
console.log("Contenu expiré");
break;
case 'ERR_04':
console.log("Aucune vue restante");
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("Données incorrectes reçues");
break;
case 'ERR_13':
console.log("Échec de l'appel SSO");
break;
case 'ERR_14':
console.log("Langue non disponible");
break;
}
}
};
En utilisant onError et onRouteChange, vous pouvez efficacement suivre et gérer les problèmes pouvant survenir dans le widget, assurant ainsi une meilleure expérience utilisateur.
Récupération des Informations Utilisateur sur l'Écran de Fin (onRouteChange)
Lors de l'utilisation de Dynamic Path, Advent Calendar, ou Combo, vous pouvez récupérer les informations utilisateur à la fin d'un jeu via le callback onRouteChange.
Cette méthode est nécessaire car l'événement standard onComplete se déclenche uniquement une fois que l'ensemble de l'expérience multi-étapes est terminé et non à la fin de chaque jeu intégré.
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 renverra une route correspondant à :
event.data.screen === 'screen_end-VOTRE_APP_ID'
Remplacez VOTRE_APP_ID par l'identifiant réel de votre application.# Récupération des Informations Utilisateur (gameInfo)
Une fois l'écran de fin détecté, vous pouvez extraire les données :
event.data.gameInfo
gameInfo contient un tableau d'informations utilisateur, qui peut inclure :
- Données saisies par l'utilisateur
- Résultats ou scores du jeu
- Champs collectés pendant l'expérience
Cette charge utile n'est disponible que sur l'écran de fin pour les expériences utilisées dans Dynamic Path, Calendrier de l'Avent, ou Combo.
Exemple
widget.onRouteChange = function (event) {
if (event.data && event.data.screen === 'screen_end-12345') {
const données = event.data.gameInfo;
console.log("Informations écran de fin:", données);
// Traitez ou transmettez ces informations selon les besoins
}
};
Mis à jour le : 20/11/2025
Merci !
