Artículos sobre: Desarrolladores y API
Este artículo también está disponible en:

Integración avanzada del código de integración HTML (widget) a través de la API

Código de ejemplo del widget


<html>
<head>
<!-- Include the bundles -->
<script src="https://cdn-apps.drimify.com/prod/widget/index.js" type="text/javascript"></script>

<!-- Setup the widget on page load -->
<script>
window.addEventListener('load', function () {
var widget = DigitaService.Widget.Create({
autoscroll: true,
element: 'gamification-widget',
engine: 'https://apps.drimify.com/XBs15jKF/',
fixed: false,
height:['auto'],
sharingurl: 'https://apps.drimify.com/XBs15jKF/',
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>


Configuración


Crea un Widget pasando un objeto Options 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 será inyectado en este HTMLElement. Puedes pasar acceso directo a un HTMLElement existente o proporcionar el ID de cadena 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 haya cargado. Puedes sobrescribir esto con un valor de marcador de posición para evitar saltos de página dependiendo de dónde se utilice el widget en la página principal. El valor está en píxeles como “600px”. Al usar options.fixed = true, el valor de altura se bloqueará al valor proporcionado introduciendo barras de desplazamiento.

options.autoscroll

booleano

true

Dependiendo de la longitud del contenido del widget y la visualización del usuario, puede requerir que la página que contiene el widget necesite desplazarse. El comportamiento predeterminado cuando un usuario está utilizando el Widget, es desplazar la página de alojamiento hasta la parte superior del widget para facilitar el uso. Para desactivar esto, establece autoscroll en false. Esta propiedad será false si options.fixed es true.

options.sharingurl

string

La URL de la página que contiene el widget

Al utilizar Compartición en Redes Sociales, esta es la URL que las personas compartirán en las Redes 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 la URL.

options.fixed

booleano

false

Normalmente el widget cambiará de tamaño automáticamente para ajustarse al contenido del motor y evitar barras de desplazamiento. Si esto se establece en true, entonces la altura del widget será persistente y no cambiará. Al utilizar esta opción, el valor de options.height debe establecerse en cualquier cosa que no sea “auto”. Si la altura del motor es mayor que el valor de altura, se utilizarán barras de desplazamiento para navegar.

options.width

string

“100%”

El ancho del widget. Se puede establecer hasta una medida CSS como “%” o “px” por ejemplo.


Carga


Una vez que un Widget está configurado, debes cargarlo. Puedes cargar el widget en cualquier momento.


Nota: Asegúrate hasta de configurar cualquiera de las devoluciones de llamada a continuación antes de cargar para que puedas capturar todos los eventos.


widget.load();

Callbacks de Eventos


onReady


Una vez que widget.load() ha sido llamado, esto cargará e inicializará el widget. Cuando el widget haya completado este proceso, invocará una función opcional de callback onReady.

widget.onReady = function (event) {
// cargado y listo para usar
console.log(event.type); // “ready”
console.log(event.data); // {}
};
onError


Una vez que widget.load() ha sido llamado, esto cargará e inicializará el widget. Cualquier error fatal que ocurra a partir de ese punto invocará una función opcional de callback onError.

widget.onError = function (event) {
throw nuevo Error(event.message);
};
onComplete


Cuando el juego se ha completado y el usuario está viendo la última pantalla. También proporciona un objeto de datos que describe lo que ocurrió en el juego.


Nota: si deseas actuar sobre esto, quizás quieras agregar un retraso 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 Motor ha cambiado de tamaño, proporcionando 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/clic) con la aplicación cargada por primera vez.

widget.onFirstInteraction = function () {
console.log("El 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 evento 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 indefinido
console.log("El usuario navegó a una nueva pantalla");
};
onScrollToTop


Ocurre cuando la Aplicación está tratando de desplazarse de vuelta hasta la parte superior de la página. Puede ser usado en la página principal para asegurarse de que el desplazamiento no se dispare (CORS) o necesite ajustarse. El evento no contiene un objeto de datos.

widget.onScrollToTop = function () {
console.log("Desplazarse hacia la parte superior");
};

Métricas


Aquí está una lista de las métricas clave que pueden ser usadas dependiendo del tipo de juego:


Clave

Descripción

data.gameMetrics.CurrentAttempt

Los intentos del usuario una vez que completó 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

verdadero/falso dependiendo del estado del usuario.

data.gameMetrics.score

La cantidad total de puntos obtenidos que el usuario completa el juego.


Credenciales


Clave

Descripción

data.credentials.isPreviewMode

Verifica si el juego está en modo de vista previa.

data.credentials.projectID

El ID de la App del juego actual.

data.credentials.projectLanguage

El idioma del proyecto en el widget (en, fr).

data.credentials.projectName

El nombre de la app.

data.credentials.projectType

El tipo de app (quiz, memoria...).

data.credentials.publisherID

El ID del publicador.

data.credentials.sessionID

El ID de la sesión del jugador actual.


Manejo de Errores


Existen dos formas principales para detectar errores y recuperar información sobre problemas que ocurren dentro del widget:## onError Callback


El callback onError captura cualquier error fatal que ocurra después de que el widget esté cargado. Esto puede ser útil para identificar cuándo una página no existe o si sucede un fallo crítico.

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;
}
}
};

onRouteChange Callback


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 del 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 hay más vistas");
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("Session Uid no detectado");
break;
case 'ERR_10':
console.log("Session Uid ya usado");
break;
case 'ERR_11':
console.log("Plan no activado");
break;
case 'ERR_12':
console.log("Datos incorrectos recibidos");
break;
case 'ERR_13':
console.log("Falló la llamada SSO");
break;
case 'ERR_14':
console.log("Idioma no disponible");
break;
}
}
};

Utilizando onError y onRouteChange, puedes seguir y manejar efectivamente los problemas que puedan surgir dentro del widget, asegurando una mejor experiencia de usuario.


Recuperando Información del Usuario al Final de la Pantalla (onRouteChange)


Al usar Dynamic Path, Advent Calendar o Combo, puedes recuperar la información del usuario al final de cualquier juego a través del callback onRouteChange.


Este método es necesario porque el evento estándar onComplete solo se activa una vez que toda la experiencia de varios pasos ha terminado, no cuando acaba cada juego embebido.


Esto permite que tu sistema reciba los resultados completos del juego (mediante gameInfo) cuando el usuario llega al final de la pantalla de la experiencia.


Configuración


Después de crear tu widget:

var widget = DigitaService.Widget.Create(options);

Añade el escucha onRouteChange:

widget.onRouteChange = function (event) {
console.log(event.type); // "routechange"
console.log(event.data); // { ... } o undefined
console.log("El usuario ha navegado a una nueva pantalla");
};

Detectar el Fin de la Pantalla


Cuando el usuario llega al final de la pantalla del juego, el widget devolverá una ruta coincidente:

event.data.screen === 'screen_end-YOUR_APP_ID'

Reemplaza YOUR_APP_ID con tu ID real de la aplicación.# Recuperación de la Información del Usuario (gameInfo)


Una vez detectado el final de la pantalla, 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 recopilados durante la experiencia


Este conjunto de datos solo está disponible al final de la pantalla 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 al finalizar la pantalla:", datos);
// Procesa o reenvía esta información según sea necesario
}
};

Actualizado el: 25/11/2025

¿Este artículo te resultó útil?

Comparte tu opinión

Cancelar

¡Gracias!