Eventi
La piattaforma emette CustomEvent del browser su window. Tutti gli eventi hanno il prefisso mindtraining: e il payload è sempre disponibile in event.detail.
mindtraining:ready
Viene emesso quando: lo script ha finito di caricarsi e la API globale MindtrainingPlatform è disponibile su window.
Quando usarlo: è l'hook consigliato per chiamare init. Ascoltando questo evento eviti race condition tra il caricamento dello script e l'esecuzione del tuo codice di inizializzazione.
event.detail
| Campo | Tipo | Descrizione |
|---|---|---|
api | object | Riferimento a window.MindtrainingPlatform |
window.addEventListener('mindtraining:ready', function (event) {
// event.detail.api === window.MindtrainingPlatform
MindtrainingPlatform.init('mindtraining', {
viewer: { loggedIn: false },
})
})Script già caricato? Se registri il listener dopo che lo script è già stato eseguito, l'evento non verrà emesso di nuovo. Usa questo pattern di guardia:
function initializeMindtraining() {
MindtrainingPlatform.init('mindtraining', {
viewer: { loggedIn: false },
})
}
if (window.MindtrainingPlatform) {
initializeMindtraining()
} else {
window.addEventListener('mindtraining:ready', initializeMindtraining, { once: true })
}mindtraining:config
Viene emesso quando: la configurazione della piattaforma viene aggiornata, sia dopo la chiamata iniziale a init() sia dopo qualsiasi updateConfig() successivo.
Quando usarlo: usalo per reagire a cambi di configurazione provenienti dall'esterno della piattaforma, ad esempio per sincronizzare lo stato della tua UI.
event.detail
L'oggetto PlatformInitConfig normalizzato completo al momento del cambiamento.
| Campo | Tipo | Descrizione |
|---|---|---|
viewer | object | Impostazioni correnti del viewer/utente |
viewer.userId | string | null | ID dell'utente attivo |
viewer.loggedIn | boolean | Se l'utente è autenticato |
viewer.subscribed | boolean | Se l'utente ha un abbonamento attivo |
ui | object | Impostazioni correnti di UI |
ui.mode | 'web' | 'app' | Modalità di rendering |
ui.actions | object | Callback delle azioni registrate |
access | object | Regole di accesso correnti per tipo di gioco |
window.addEventListener('mindtraining:config', function (event) {
const config = event.detail
console.log('Utente autenticato:', config.viewer?.loggedIn)
console.log('Utente abbonato:', config.viewer?.subscribed)
console.log("Regole di accesso attive:", config.access?.games)
})Eventi di gioco e navigazione
I seguenti eventi vengono emessi durante il gameplay e la navigazione. Usali per analytics, tracking, integrazioni host e osservabilità.
mindtraining:game:loaded
Viene emesso quando: una sessione o schermata di gioco è pronta all'interazione.
Quando usarlo: usalo per tracciare pageview interne del gioco, misurare quali giochi vengono davvero caricati o attivare logica host in base al tipo di gioco.
event.detail
| Campo | Tipo | Descrizione |
|---|---|---|
gameType | string | Tipo di gioco (es. crossword, sudoku) |
gameId | string | Identificatore univoco del gioco |
variant | string | Variante del gioco (es. default, mini) |
route | string | Percorso interno |
source | string | Origine del gioco (es. today, archive) |
window.addEventListener('mindtraining:game:loaded', function (event) {
Analytics.track('mindtraining_game_loaded', event.detail)
})mindtraining:game:playing
Viene emesso quando: l'utente inizia a interagire davvero con il gioco (per esempio, prima mossa o primo input).
Quando usarlo: usalo per distinguere tra un gioco caricato e un gioco effettivamente giocato, misurare l'attivazione o tracciare l'engagement.
event.detail
| Campo | Tipo | Descrizione |
|---|---|---|
gameType | string | Tipo di gioco |
gameId | string | Identificatore univoco del gioco |
variant | string | Variante del gioco |
startedAt | string | Timestamp ISO 8601 di inizio |
window.addEventListener('mindtraining:game:playing', function (event) {
Analytics.track('mindtraining_game_playing', event.detail)
})mindtraining:game:completed
Viene emesso quando: l'utente completa con successo un gioco.
Quando usarlo: usalo per funnel completi, analisi della difficoltà o ranking/gamification lato host.
event.detail
| Campo | Tipo | Descrizione |
|---|---|---|
gameType | string | Tipo di gioco |
gameId | string | Identificatore univoco del gioco |
variant | string | Variante del gioco |
completedAt | string | Timestamp ISO 8601 di completamento |
durationMs | number | Durata della sessione in millisecondi |
score | number | Punteggio finale (se applicabile) |
window.addEventListener('mindtraining:game:completed', function (event) {
Analytics.track('mindtraining_game_completed', event.detail)
})mindtraining:game:abandoned
Viene emesso quando: l'utente abbandona una sessione attiva senza completarla.
Quando usarlo: usalo per rilevare attriti, misurare l'abbandono per gioco o variante o migliorare i flussi di retention.
event.detail
| Campo | Tipo | Descrizione |
|---|---|---|
gameType | string | Tipo di gioco |
gameId | string | Identificatore univoco del gioco |
variant | string | Variante del gioco |
durationMs | number | Tempo speso prima dell'abbandono |
progress | number | Progresso (0–1) al momento dell'abbandono |
window.addEventListener('mindtraining:game:abandoned', function (event) {
Analytics.track('mindtraining_game_abandoned', event.detail)
})mindtraining:game:state:saved
Viene emesso quando: lo stato del gioco viene persistito (ad esempio per la funzionalità “continua a giocare”).
Quando usarlo: usalo per tracciare retention, flussi di ripresa o verificare che il salvataggio dello stato funzioni correttamente.
event.detail
window.addEventListener('mindtraining:game:state:saved', function (event) {
Analytics.track('mindtraining_game_state_saved', event.detail)
})mindtraining:access:blocked
Viene emesso quando: la piattaforma rileva che una superficie (gioco di oggi, archivio, ecc.) è bloccata per l'utente.
Quando usarlo: usalo per attivare paywall contestuali, misurare domanda insoddisfatta o personalizzare i messaggi host.
event.detail
window.addEventListener('mindtraining:access:blocked', function (event) {
Analytics.track('mindtraining_access_blocked', event.detail)
if (event.detail.blockedReason === 'subscription_required') {
Paywall.show({ context: 'game_archive' })
}
})mindtraining:route:changed
Viene emesso quando: cambia la route interna della piattaforma (per esempio, navigazione all'interno della SPA).
Quando usarlo: usalo per pageview virtuali o per sincronizzare l'analytics con la navigazione interna della piattaforma.
event.detail
window.addEventListener('mindtraining:route:changed', function (event) {
Analytics.track('mindtraining_route_changed', event.detail)
})mindtraining:pageview
Viene emesso quando: la piattaforma registra una vista navigabile rilevante per l'analytics.
Quando usarlo: usalo per il tracciamento delle pageview, il reporting per sezione e tipo di gioco o l'attribuzione della navigazione interna.
event.detail