Integrazione avanzata del codice di integrazione HTML (widget) tramite l'API
Configurazione del Widget
Crea un Widget passando un oggetto Options alla funzione Create:
var widget = DigitaService.Widget.Create(options);Opzioni di Configurazione
Necessarie
Opzione | Tipo | Descrizione |
|---|---|---|
options.element | string - HTMLElement | Il widget verrà inserito in questo elemento HTML. Puoi passare un accesso diretto a un elemento HTML esistente o fornire l'ID stringa per quell'elemento. Se non fornisci questa proprietà, tenterà di trovare un ID “digitaservice-widget” sulla pagina. |
options.engine | string | L'URL assoluto dell'applicazione che verrà caricata nel widget. |
Opzionali
Opzione | Tipo | Predefinito | Descrizione |
|---|---|---|---|
options.height | string | auto | Il widget ha un'altezza predefinita di zero prima di essere caricato. Puoi sovrascrivere questo valore con un valore di segnaposto per evitare salti di pagina a seconda di dove il widget è utilizzato nella pagina padre. Il valore è in pixel ad esempio “600px”. Quando utilizzi options.fixed = true l'altezza sarà bloccata al valore fornito introducendo barre di scorrimento. |
options.autoscroll | boolean | true | A seconda della lunghezza del contenuto del widget e della visualizzazione dell'utente, potrebbe essere necessario che la pagina contenente il widget richieda lo scorrimento della pagina che lo ospita. Quando un utente utilizza il Widget, il comportamento predefinito è di scorrere la pagina ospitante verso l'alto del widget per migliorare l'usabilità. Per disabilitarlo, imposta autoscroll su false. Questa proprietà sarà falsa se options.fixed è true. |
options.sharingurl | string | L'URL ospitante contenente il widget | Quando si utilizza la Condivisione Sociale, questo è l'URL che le persone condivideranno sui Social Media per portarli alla tua campagna. Se la condivisione è una stringa vuota, utilizzerà la pagina ospitante (contenente il widget) come URL. |
options.fixed | boolean | false | Solitamente il widget adatterà automaticamente la dimensione per adattarsi al contenuto dell'engine ed evitare barre di scorrimento. Se questo è impostato su true, l'altezza del widget sarà persistente e non cambierà. Quando utilizzi questa opzione, il valore options.height deve essere impostato su un valore diverso da “auto”. Se l'altezza dell'engine è superiore al valore di altezza, verranno utilizzate barre di scorrimento per la navigazione. |
options.width | string | “100%” | La larghezza del widget. Può essere impostata usando una misura CSS come “%” o “px”. |
Caricamento
Una volta configurato un Widget, devi caricarlo. Puoi caricare il widget in qualsiasi momento.
Nota: assicurati di impostare qualsiasi callback sotto elencato prima di caricare affinché tu possa catturare tutti gli eventi.
widget.load();Callback degli Eventi
onReady
Dopo che widget.load() è stato chiamato, questo caricherà e inizializzerà il widget. Quando il widget ha completato questo processo, invocherà un callback opzionale onReady.
widget.onReady = function (event) {
// caricato e pronto per l'uso
console.log(event.type); // “ready”
console.log(event.data); // {}
};
onError
Dopo che widget.load() è stato chiamato, questo caricherà e inizializzerà il widget. Eventuali errori fatali che si verificano successivamente invocheranno un callback opzionale onError.
widget.onError = function (event) {
throw nuovo Error(event.message);
};
onComplete
Quando la partita è stata completata e l'utente sta guardando l'ultima schermata. Fornisce anche un oggetto dati che descrive cosa è successo nella partita.
Nota: se vuoi agire su questo, potresti voler impostare un timeout dentro il callback affinché l'utente abbia tempo di leggere la Schermata Finale, poiché si verifica istantaneamente quando si raggiunge l'ultima schermata. Puoi anche usare onClose.
widget.onComplete = function (event) {
console.log(event.type); // “complete”
console.log(event.data); // {}
console.log("Il punteggio degli utenti era" + event.data.gameMetrics.score);
};
onResize
Si verifica quando l'Engine ha cambiato dimensione, fornisce l'altezza come valore in pixel.
widget.onResize = function (event) {
console.log(event.type); // “resize”
console.log(event.data); // {}
console.log("Altezza dell'Applicazione:" + event.data.height);
};
onFirstInteraction
Quando l'utente interagisce (tocca/clicca) con l'applicazione caricata per la prima volta.
widget.onFirstInteraction = function () {
console.log("L'utente ha interagito con l'applicazione per la prima volta");
};
onRouteChange
Si verifica quando l'applicazione ha cambiato percorso all'interno del widget. (Naviga tra le schermate). L'evento può o non può contenere un oggetto dati a seconda del contesto.
widget.onRouteChange = function (event) {
console.log(event.type) // “routechange”
console.log(event.data) // {} o undefined
console.log("L'utente ha navigato a una nuova schermata");
};
onScrollToTop
Si verifica quando l'applicazione sta cercando di scorrere nuovamente all'inizio della pagina. Può essere utilizzato sulla pagina genitore per assicurarsi che lo scorrimento non venga attivato (CORS) o debba essere regolato. L'evento non contiene un oggetto dati.
widget.onScrollToTop = function () {
console.log("Scorrimento all'inizio");
};
Metriche
Ecco un elenco delle metriche chiave che possono essere utilizzate a seconda del tipo di partita:
Chiave | Descrizione |
|---|---|
data.gameMetrics.CurrentAttempt | Gli tentativi quando dell'utente una volta che ha completato la partita. |
data.gameMetrics.prizeID | L'ID premio. |
data.gameMetrics.prizeImage | L'immagine del premio. |
data.gameMetrics.prizeName | Il nome del premio. |
data.gameMetrics.prizeRef | Il riferimento premio. |
data.gameMetrics.totalPossibleAttempts | L'importo totale di possibili tentativi. |
data.gameMetrics.userWon | true/false a seconda dello stato dell'utente. |
data.gameMetrics.score | L'importo totale di punti aggregati che questo utente ottiene completando la partita. |
Credenziali
Chiave | Descrizione |
|---|---|
data.credentials.isPreviewMode | Verifica se la partita è in modalità anteprima. |
data.credentials.projectID | L'id dell'app attuale giocata. |
data.credentials.projectLanguage | Il cambio di 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 del publisher. |
data.credentials.sessionID | L'id della sessione dell'attuale giocatore. |
Gestione degli Errori
Esistono due modi principali per rilevare errori e recuperare informazioni su problemi che si verificano all'interno del widget:
Callback onError
Il callback onError cattura qualsiasi errore fatale che si verifica dopo che il widget è stato caricato. Questo può essere utile per identificare quando una pagina non esiste o se si verifica un errore critico.
widget.onError = function (event) {
if (typeof event.data.message !== 'undefined') {
switch (event.data.message) {
default:
// Non fare nulla
break;
case 'ERR_15':
console.log("La pagina non esiste");
break;
}
}
};
Callback onRouteChange
Il callback onRouteChange viene attivato quando l'applicazione naviga tra schermate diverse all'interno del widget. Questo è utile per tracciare errori correlati allo stato dell'applicazione e alla disponibilità del contenuto.
widget.onRouteChange = function (event) {
if (typeof event.data.errorCode !== 'undefined') {
switch (event.data.errorCode) {
default:
// Non fare nulla
break;
case 'ERR_01':
console.log("Nessun piano disponibile");
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("Nessun altro visualizzazioni");
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 sessione non rilevato");
break;
case 'ERR_10':
console.log("Uid sessione già usato");
break;
case 'ERR_11':
console.log("Piano non attivato");
break;
case 'ERR_12':
console.log("Dati ricevuti errati");
break;
case 'ERR_13':
console.log("Chiamata SSO fallita");
break;
case 'ERR_14':
console.log("Lingua non disponibile");
break;
}
}
};
Utilizzando sia onError che onRouteChange, puoi tracciare e gestire efficacemente i problemi che possono verificarsi all'interno del widget, garantendo una migliore esperienza utente.
Recuperare Informazioni sull'Utente sulla Schermata Finale (onRouteChange)
Quando usi Dynamic Path™, Calendario dell'Avvento, o Combo™, puoi recuperare informazioni sull'utente alla fine di qualsiasi partita tramite il callback onRouteChange.
Questo metodo è richiesto perché l'evento standard onComplete viene attivato solo quando l'intera esperienza a più passaggi è terminata, non quando ogni partita integrata si conclude.
Questo consente al tuo sistema di ricevere i risultati completi della partita (tramite gameInfo) quando l'utente raggiunge la schermata finale dell'esperienza.
Configurazione
Dopo aver creato il tuo widget:
var widget = DigitaService.Widget.Create(options);Aggiungi il listener onRouteChange:
widget.onRouteChange = function (event) {
console.log(event.type); // "routechange"
console.log(event.data); // { ... } o undefined
console.log("L'utente ha navigato a una nuova schermata");
};
Rilevamento della Schermata Finale
Quando l'utente raggiunge la schermata finale della partita, il widget restituirà un percorso corrispondente:
event.data.screen === 'screen_end-YOUR_APP_ID'Sostituisci YOUR_APP_ID con il tuo ID applicazione effettivo.
Recupero delle Informazioni sull'Utente (gameInfo)
Una volta rilevata la schermata finale, puoi estrarre i dati:
event.data.gameInfogameInfo contiene un array di informazioni sull'utente, che potrebbe includere:
- Dati di input degli utenti
- Risultati o punteggi della partita
- Campi raccolti durante l'esperienza
Questo payload è disponibile solo dalla schermata finale per esperienze utilizzate all'interno di Dynamic Path, Calendario dell'Avvento, o Combo.
Esempio
widget.onRouteChange = function (event) {
if (event.data && event.data.screen === 'screen_end-12345') {
const data = event.data.gameInfo;
console.log("Informazioni della schermata finale:", data);
// Elabora o inoltra queste informazioni come necessario
}
};
Aggiornato il: 02/10/2026
Grazie!
