Integración avanzada del código de integración HTML (widget) a través de la API
Widget código de muestra
<html>
<head>
<!-- Incluir los bundles -->
<script src="https://cdn-apps.drimify.com/prod/widget/index.js" type="text/javascript"></script>
<!-- Configurar el widget al cargar la página -->
<script>
window.addEventListener('load', function () {
var widget = DigitaService.Widget.Create({
autoscroll: true,
element: 'gamification-widget',
engine: 'https://apps.drimify.com/Rf6aGmBR/',
fixed: false,
altura:['auto'],
sharingurl: 'https://apps.drimify.com/Rf6aGmBR/',
ancho: '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>
Configuración
Crea un Widget pasando un objeto de opciones a la función Create:
var widget = DigitaService.Widget.Create(options);Opciones de Configuración
Requerido
Opción | Tipo | Descripción |
|---|---|---|
options.element | string - HTMLElement | El widget se inyectará en este HTMLElement. Puedes pasar acceso directo a un HTMLElement existente o proporcionar el ID de string para ese elemento. Si no proporcionas esta propiedad, intentará encontrar un id “digitaservice-widget” en la página. |
options.engine | string | La URL absoluta de la aplicación que se cargará en el widget. |
Opcional
Opción | Tipo | Predeterminado | Descripción |
|---|---|---|---|
options.height | string | auto | El widget tiene una altura predeterminada de cero antes de que se cargue. Puedes anular esto con un valor de marcador de posición para evitar saltos de página dependiendo de dónde se use el widget en la página principal. El valor está en píxeles como “600px”. Al usar options.fixed = true, el valor de la altura se bloqueará al valor proporcionado, introduciendo barras de desplazamiento. |
options.autoscroll | boolean | true | Dependiendo de la longitud del contenido del widget y la pantalla del usuario, puede requerir que la página que contiene el widget necesite desplazamiento de la página de alojamiento. El comportamiento predeterminado cuando un usuario está usando el Widget es desplazar la página de alojamiento hasta la parte superior del widget para mejorar la usabilidad. Para desactivar esto, establece autoscroll en false. Esta propiedad será falsa si options.fixed es true. |
options.sharingurl | string | La URL de alojamiento que contiene el widget | Al utilizar el Compartir en Redes Sociales, esta es la URL que las personas compartirán en medios sociales para llevarlas a tu campaña. Si sharing es una cadena vacía, utilizará la página de alojamiento (que contiene el widget) como URL. |
options.fixed | boolean | false | Generalmente, el widget cambiará de tamaño automáticamente para ajustarse al contenido del engine y evitar barras de desplazamiento. Si esto se configura en true, entonces la altura del widget será persistente y no cambiará. Al utilizar esta opción, el valor de options.height debe configurarse en algo distinto de “auto”. Si la altura del engine es mayor que el valor de height, se utilizarán barras de desplazamiento para navegar. |
options.width | string | “100%” | El ancho del widget. Se puede configurar como una medida CSS como “%” o “px”, por ejemplo. |
Cargar
Una vez que el Widget está configurado, debes cargarlo. Puedes cargar el widget en cualquier momento.
Nota: Asegúrate de configurar cualquier de los callbacks a continuación antes de cargar para que puedas capturar todos los eventos.
widget.load();Callbacks de Evento
onReady
Una vez que se ha llamado a widget.load(), esto cargará e inicializará el widget. Cuando el widget haya completado este proceso, invocará un callback opcional onReady.
widget.onReady = function (event) {
// cargado y listo para usar
console.log(event.type); // “ready”
console.log(event.data); // {}
};
onError
Una vez que se ha llamado a widget.load(), esto cargará e inicializará el widget. Cualquier error fatal que ocurra después de ese punto invocará un callback opcional onError.
widget.onError = function (event) {
throw nuevo Error(event.message);
};
onComplete
Una vez que el juego ha sido completado y el usuario está viendo en la última pantalla. También proporciona un objeto de datos describiendo lo que ocurrió en el juego.
Nota: si deseas actuar en esto, puedes querer dar un tiempo de espera dentro del callback para que el usuario tenga tiempo de leer la Pantalla Final ya que ocurre instantáneamente al llegar a la última pantalla. También puedes usar onClose.
widget.onComplete = function (event) {
console.log(event.type); // “complete”
console.log(event.data); // {}
console.log("La puntuación del usuario fue" + event.data.gameMetrics.score);
};
onResize
Ocurre cuando el Engine ha sido redimensionado, proporciona la altura como un valor en píxeles.
widget.onResize = function (event) {
console.log(event.type); // “resize”
console.log(event.data); // {}
console.log("Altura de la aplicación:" + event.data.height);
};
onFirstInteraction
Cuando el usuario interactúa (tocar/click) con la aplicación cargada por primera vez.
widget.onFirstInteraction = function () {
console.log("Usuario interactuó con la aplicación por primera vez");
};
onRouteChange
Ocurre cuando la aplicación ha cambiado de ruta dentro del widget. (Navega entre pantallas). El event puede o no contener un objeto de datos dependiendo del contexto.
widget.onRouteChange = function (event) {
console.log(event.type) // “routechange”
console.log(event.data) // {} o undefined
console.log("Usuario navegó a una nueva pantalla");
};
onScrollToTop
Ocurre cuando la aplicación está tratando de desplazarse de nuevo a la parte superior de la página. Puede utilizarse en la página de origen para asegurar que el desplazamiento no se dispara (CORS) o necesita ser ajustado. El event no contiene un objeto de datos.
widget.onScrollToTop = function () {
console.log("Desplazarse a la parte superior");
};
Métricas
Aquí hay una lista de las métricas clave que pueden ser utilizadas dependiendo del tipo de juego:
Clave | Descripción |
|---|---|
data.gameMetrics.CurrentAttempt | Los intentos del usuario una vez que ha completado el juego. |
data.gameMetrics.prizeID | El ID del premio. |
data.gameMetrics.prizeImage | La imagen del premio. |
data.gameMetrics.prizeName | El nombre del premio. |
data.gameMetrics.prizeRef | La referencia del premio. |
data.gameMetrics.totalPossibleAttempts | La cantidad total de intentos posibles. |
data.gameMetrics.userWon | true/false dependiendo del estado del usuario. |
data.gameMetrics.score | La cantidad total de puntos acumulados que este usuario completa el juego. |
Credenciales
Clave | Descripción |
|---|---|
data.credentials.isPreviewMode | Verificar si el juego está en modo de vista previa. |
data.credentials.projectID | El id de la aplicación actual jugada. |
data.credentials.projectLanguage | El idioma del proyecto en el widget (en, fr). |
data.credentials.projectName | El nombre de la aplicación. |
data.credentials.projectType | El tipo de aplicación (quiz, memory...). |
data.credentials.publisherID | El id del publicador. |
data.credentials.sessionID | El id de sesión del jugador actual. |
Manejo de Errores
Hay dos formas principales de detectar errores y recuperar información sobre problemas que ocurren dentro del widget:
Callback onError
El callback onError captura cualquier error fatal que ocurra después de que se cargue el widget. Esto puede ser útil para identificar cuando una página no existe o si ocurre una falla crítica.
widget.onError = function (event) {
if (typeof event.data.message !== 'undefined') {
switch (event.data.message) {
default:
// No hacer nada
break;
case 'ERR_15':
console.log("La página no existe");
break;
}
}
};
Callback onRouteChange
El callback onRouteChange se activa cuando la aplicación navega entre diferentes pantallas dentro del widget. Esto es útil para rastrear errores relacionados con el estado de la aplicación y la disponibilidad de contenido.
widget.onRouteChange = function (event) {
if (typeof event.data.errorCode !== 'undefined') {
switch (event.data.errorCode) {
default:
// No hacer nada
break;
case 'ERR_01':
console.log("No hay plan disponible");
break;
case 'ERR_02':
console.log("El contenido aún no está disponible");
break;
case 'ERR_03':
console.log("El contenido ha expirado");
break;
case 'ERR_04':
console.log("No más visualizaciones");
break;
case 'ERR_05':
console.log("Error de seguridad");
break;
case 'ERR_07':
console.log("Aplicación no publicada");
break;
case 'ERR_08':
console.log("Aplicación Premium no disponible");
break;
case 'ERR_09':
console.log("Uid de sesión no detectado");
break;
case 'ERR_10':
console.log("Uid de sesión ya utilizado");
break;
case 'ERR_11':
console.log("Plan no activado");
break;
case 'ERR_12':
console.log("Datos incorrectos recibidos");
break;
case 'ERR_13':
console.log("La llamada SSO ha fallado");
break;
case 'ERR_14':
console.log("Idioma no disponible");
break;
}
}
};
Al usar ambos onError y onRouteChange, puedes rastrear y manejar efectivamente problemas que puedan ocurrir dentro del widget, asegurando una mejor experiencia de usuario.
Recuperación de Información del Usuario en la Pantalla Final (onRouteChange)
Al usar Dynamic Path™, Advent Calendar o Combo™, puedes recuperar información del usuario al final de cualquier juego a través del callback onRouteChange.
Este método es requerido porque el evento estándar onComplete solo se activa una vez que toda la experiencia multi-paso ha finalizado, no cuando cada juego incrustado termina.
Esto permite que tu sistema reciba los resultados del juego completo (vía gameInfo) cuando el usuario llega al fin de la pantalla de la experiencia.
Configuración
Después de crear tu widget:
var widget = DigitaService.Widget.Create(options);
Añadir el listener onRouteChange:
widget.onRouteChange = function (event) {
console.log(event.type); // "routechange"
console.log(event.data); // { ... } o undefined
console.log("Usuario navegó a una nueva pantalla");
};
Detectando la Pantalla Final
Cuando el usuario llega al fin de la pantalla del juego, el widget devolverá una ruta que coincide con:
event.data.screen === 'screen_end-YOUR_APP_ID'
Reemplazar YOUR_APP_ID con tu actual ID de aplicación.
Recuperando la Información del Usuario (gameInfo)
Una vez que se detecta la pantalla final, puedes extraer los datos:
event.data.gameInfo
gameInfo contiene un array de información del usuario, que puede incluir:
- Datos de entrada del usuario
- Resultados o puntuaciones del juego
- Campos recogidos durante la experiencia
Este payload solo está disponible en la pantalla final para experiencias utilizadas dentro de Dynamic Path, Advent Calendar o Combo.
Ejemplo
widget.onRouteChange = function (event) {
if (event.data && event.data.screen === 'screen_end-12345') {
const datos = event.data.gameInfo;
console.log("Información de la pantalla final:", datos);
// Procesar o reenviar esta información según sea necesario
}
};
Actualizado el: 02/10/2026
¡Gracias!
