Articoli su: Sviluppatori e API
Questo articolo è disponibile anche in:

Integrazione avanzata del codice di integrazione HTML (widget) tramite l'API

Esempio di codice del widget


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

<!-- Configura il widget al caricamento della pagina -->
<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>


Configurazione


Crea un widget passando un oggetto di opzioni alla funzione Create:


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


Opzioni di configurazione


Obbligatorie


Opzione

Tipo

Descrizione

options.element

string - HTMLElement

Il widget verrà inserito in questo HTMLElement. Puoi passare direttamente un HTMLElement esistente oppure il suo ID come stringa. Se non specifichi questa proprietà, il widget cercherà nella pagina un elemento con ID “digitaservice-widget”.

options.engine

string

L’URL assoluto dell’applicazione da caricare nel widget.


Facoltative


Opzione

Tipo

Valore predefinito

Descrizione

options.height

string

auto

Prima del caricamento, l’altezza predefinita del widget è pari a zero. Puoi impostare un’altezza iniziale per riservare lo spazio necessario ed evitare spostamenti del contenuto, a seconda della posizione del widget nella pagina che lo ospita. Il valore è espresso in pixel, ad esempio “600px”. Se utilizzi options.fixed = true, l’altezza rimane fissa al valore specificato e, se necessario, vengono visualizzate le barre di scorrimento.

options.autoscroll

boolean

true

A seconda della lunghezza del contenuto del widget e delle dimensioni dello schermo dell’utente, potrebbe essere necessario scorrere la pagina che lo ospita. Per impostazione predefinita, durante l’utilizzo del widget la pagina scorre automaticamente fino all’inizio del widget, per facilitarne l’uso. Per disattivare questo comportamento, imposta autoscroll su false. Questa proprietà viene impostata su false se options.fixed è true.

options.sharingurl

string

L’URL della pagina che ospita il widget

Quando utilizzi la condivisione sui social, questo è l’URL che gli utenti condivideranno per indirizzare altre persone alla tua campagna. Se il valore è una stringa vuota, verrà utilizzato l’URL della pagina che ospita il widget.

options.fixed

boolean

false

Normalmente il widget si ridimensiona automaticamente per adattarsi al contenuto dell’applicazione ed evitare le barre di scorrimento. Se questa opzione è impostata su true, l’altezza del widget rimane fissa. Quando utilizzi questa opzione, imposta options.height su un valore diverso da “auto”. Se l’altezza del contenuto supera il valore impostato, verranno visualizzate le barre di scorrimento.

options.width

string

“100%”

La larghezza del widget. Puoi impostarla utilizzando un’unità di misura CSS, ad esempio “%” o “px”.


Caricamento


Una volta configurato il widget, devi caricarlo. Puoi farlo in qualsiasi momento.


Nota: configura tutte le callback descritte di seguito prima di caricare il widget, in modo da intercettare tutti gli eventi.


widget.load();


Callback degli eventi


onReady


La chiamata a widget.load() avvia il caricamento e l’inizializzazione del widget. Al termine di questo processo, viene richiamata la callback facoltativa onReady.


Nota: onReady viene attivata prima che venga visualizzata la prima schermata. Il primo evento onRouteChange indica che il partecipante può vedere il contenuto. Se l’esperienza non riesce ad avviarsi, onReady non viene attivata e viene richiamata onError.


widget.onReady = function (event) {
// Caricato e pronto all’uso
console.log(event.type); // “ready”
console.log(event.data); // {}
};


onError


La chiamata a widget.load() avvia il caricamento e l’inizializzazione del widget. Qualsiasi errore irreversibile che si verifica da quel momento in poi richiama la callback facoltativa onError.


widget.onError = function (event) {
console.log(event.data.message); // Ad esempio, "ERR_15"
};


onComplete


Viene richiamata quando la partita è terminata e l’utente sta visualizzando l’ultima schermata. Fornisce anche un oggetto dati che descrive ciò che è avvenuto durante la partita.


Nota: se vuoi eseguire un’azione in risposta a questo evento, valuta la possibilità di inserire un ritardo nella callback, così da lasciare all’utente il tempo di leggere la Schermata Finale. L’evento viene infatti attivato non appena questa viene raggiunta. In alternativa, puoi utilizzare onClose.


widget.onComplete = function (event) {
console.log(event.type); // “complete”
console.log(event.data); // {}
console.log("Punteggio dell’utente: " + event.data.gameMetrics.score);
};


onResize


Viene richiamata quando l’applicazione viene ridimensionata e restituisce l’altezza in pixel.


widget.onResize = function (event) {
console.log(event.type); // “resize”
console.log(event.data); // {}
console.log("Altezza dell’applicazione: " + event.data.height);
};


onFirstInteraction


Viene richiamata quando l’utente interagisce per la prima volta con l’applicazione caricata, tramite tocco o clic.


widget.onFirstInteraction = function () {
console.log("L’utente ha interagito con l’applicazione per la prima volta");
};


onRouteChange


Viene richiamata quando l’applicazione cambia percorso all’interno del widget, passando da una schermata all’altra. A seconda del contesto, l’evento può contenere o meno un oggetto dati.


widget.onRouteChange = function (event) {
console.log(event.type) // “routechange”
console.log(event.data) // {} oppure undefined
console.log("L’utente è passato a una nuova schermata");
};


onScrollToTop


Viene richiamata quando l’applicazione tenta di tornare all’inizio della pagina tramite scorrimento. Può essere utilizzata nella pagina che ospita il widget per verificare che lo scorrimento non venga attivato (CORS) o per adattarne il comportamento. L’evento non contiene un oggetto dati.


widget.onScrollToTop = function () {
console.log("Scorrimento verso l’inizio della pagina");
};


Metriche


Di seguito sono elencate le principali metriche disponibili, a seconda del tipo di gioco:


Chiave

Descrizione

data.gameMetrics.CurrentAttempt

Il numero del tentativo con cui l’utente ha completato la partita.

data.gameMetrics.prizeID

L’ID del premio.

data.gameMetrics.prizeImage

L’immagine del premio.

data.gameMetrics.prizeName

Il nome del premio.

data.gameMetrics.prizeRef

Il riferimento del premio.

data.gameMetrics.totalPossibleAttempts

Il numero totale di tentativi disponibili.

data.gameMetrics.userWon

true o false, a seconda che l’utente abbia vinto o meno.

data.gameMetrics.score

Il punteggio totale accumulato dall’utente al termine della partita.


Credenziali


Chiave

Descrizione

data.credentials.isPreviewMode

Indica se il gioco è in modalità anteprima.

data.credentials.projectID

L’ID dell’app attualmente in uso.

data.credentials.projectLanguage

La lingua del progetto nel widget (en, fr).

data.credentials.projectName

Il nome dell’app.

data.credentials.projectType

Il tipo di app (quiz, memory...).

data.credentials.publisherID

L’ID dell’editore.

data.credentials.sessionID

L’ID della sessione del giocatore attuale.


Gestione degli errori


Esistono due modi principali per rilevare gli errori e ottenere informazioni sui problemi che si verificano all’interno del widget:


Callback onError


La callback onError intercetta gli errori irreversibili, ossia quelli che impediscono all’esperienza di avviarsi o di riprendere il funzionamento. Il codice di errore è disponibile in event.data.message. In questi casi, onReady non viene attivata.

widget.onError = function (event) {
if (event.data && typeof event.data.message !== 'undefined') {
switch (event.data.message) {
default:
// Non eseguire alcuna azione
break;
case 'ERR_04':
console.log("Nessuna visualizzazione residua");
break;
case 'ERR_05':
console.log("Errore di sicurezza");
break;
case 'ERR_07':
console.log("Applicazione non pubblicata");
break;
case 'ERR_08':
console.log("Applicazione Premium non disponibile");
break;
case 'ERR_09':
console.log("UID della sessione non rilevato");
break;
case 'ERR_10':
console.log("UID della sessione non consentito");
break;
case 'ERR_13':
console.log("Chiamata SSO non riuscita");
break;
case 'ERR_14':
console.log("Lingua non disponibile");
break;
case 'ERR_15':
console.log("La pagina non esiste");
break;
case 'ERR_17':
console.log("Configurazione SSO non valida");
break;
case 'ERR_21':
console.log("Nessun gioco assegnato a Combo o Dynamic Path");
break;
}
}
};


Callback onRouteChange


La callback onRouteChange viene attivata quando l’applicazione passa da una schermata all’altra all’interno del widget. È utile per monitorare gli errori relativi allo stato dell’applicazione e alla disponibilità dei contenuti.


widget.onRouteChange = function (event) {
if (event.data && typeof event.data.errorCode !== 'undefined') {
switch (event.data.errorCode) {
default:
// Non eseguire alcuna azione
break;
case 'ERR_02':
console.log("Il contenuto non è ancora disponibile");
break;
case 'ERR_03':
console.log("Il contenuto è scaduto");
break;
case 'ERR_04':
console.log("Nessuna visualizzazione residua");
break;
case 'ERR_16':
console.log("Nessuna domanda disponibile");
break;
case 'ERR_18':
console.log("Intervallo tra due periodi di attivazione");
break;
case 'ERR_19':
console.log("Al di fuori degli orari di apertura");
break;
}
}
};


errorCode è presente solo in queste schermate di indisponibilità. Le altre schermate che impediscono al partecipante di giocare (partita già giocata, restrizioni di accesso, moduli rifiutati) non contengono errorCode: puoi identificarle tramite il nome della schermata in event.data.screen.


Per l’elenco completo dei nomi delle schermate, l’ordine degli eventi al caricamento, il comportamento di session_uid e i timeout di caricamento, consulta Ciclo di vita del widget e gestione degli errori.


Recupero delle informazioni sull’utente nella Schermata Finale (onRouteChange)


Quando utilizzi Dynamic Path™, Advent Calendar o Combo™, puoi recuperare le informazioni sull’utente al termine di ogni partita tramite la callback onRouteChange.


Questo metodo è necessario perché l’evento standard onComplete viene attivato solo al termine dell’intera esperienza a più fasi, non alla conclusione di ogni singola partita integrata.


In questo modo, il tuo sistema può ricevere tutti i risultati della partita (tramite gameInfo) quando l’utente raggiunge la Schermata Finale dell’esperienza.


Configurazione


Dopo aver creato il widget:


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


Aggiungi il listener onRouteChange:


widget.onRouteChange = function (event) {
console.log(event.type); // "routechange"
console.log(event.data); // { ... } oppure undefined
console.log("L’utente è passato a una nuova schermata");
};

```# Rilevamento della Schermata Finale

Quando l’utente raggiunge la schermata finale della partita, il widget restituisce una route corrispondente a:

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



Sostituisci `YOUR_APP_ID` con l’ID effettivo della tua applicazione.

# Recupero delle informazioni sull’utente (`gameInfo`)

Una volta rilevata la schermata finale, puoi estrarre i dati:

event.data.gameInfo



`gameInfo` contiene un **array di informazioni sull’utente**, che può includere:
* Dati inseriti dall’utente
* Risultati o punteggi della partita
* Campi raccolti durante l’esperienza

Questo payload è disponibile solo nella schermata finale delle esperienze utilizzate all’interno di **Dynamic Path**, **Advent Calendar** o **Combo**.

# Esempio

widget.onRouteChange = function (event) {
if (event.data && event.data.screen === 'screen_end-12345') {
const dati = event.data.gameInfo;
console.log("Informazioni sulla schermata finale:", data);
// Elabora o inoltra queste informazioni secondo necessità
}
};


Aggiornato il: 29/10/2026

È stato utile questo articolo?

Condividi il tuo feedback

Annulla

Grazie!