Skip to content

Eventos

A plataforma emite CustomEvents do navegador em window. Todos os eventos usam o prefixo mindtraining: e o payload está sempre disponível em event.detail.


mindtraining:ready

Disparado quando: o script terminou de carregar e a API global MindtrainingPlatform está disponível em window.

Quando usar: este é o hook recomendado para chamar init. Ao escutar este evento, evita condições de corrida entre o carregamento do script e a execução do código de inicialização.

event.detail

CampoTipoDescrição
apiobjectReferência para window.MindtrainingPlatform
js
window.addEventListener('mindtraining:ready', function (event) {
  // event.detail.api === window.MindtrainingPlatform
  MindtrainingPlatform.init('mindtraining', {
    viewer: { loggedIn: false },
  })
})

O script já carregou? Se o listener for registado depois de o script já ter sido executado, o evento não voltará a ser emitido. Use este padrão de guarda:

js
function initializeMindtraining() {
  MindtrainingPlatform.init('mindtraining', {
    viewer: { loggedIn: false },
  })
}

if (window.MindtrainingPlatform) {
  initializeMindtraining()
} else {
  window.addEventListener('mindtraining:ready', initializeMindtraining, { once: true })
}

mindtraining:config

Disparado quando: a configuração da plataforma é atualizada, tanto após a chamada inicial a init() como depois de qualquer updateConfig() subsequente.

Quando usar: use este evento para reagir a alterações de configuração feitas fora da plataforma, por exemplo para sincronizar o estado da sua própria UI.

event.detail

O objeto PlatformInitConfig normalizado completo no momento da alteração.

CampoTipoDescrição
viewerobjectConfigurações atuais do visualizador/utilizador
viewer.userIdstring | nullID do utilizador ativo
viewer.loggedInbooleanSe o utilizador está autenticado
viewer.subscribedbooleanSe o utilizador tem uma subscrição ativa
uiobjectConfigurações atuais de UI
ui.mode'web' | 'app'Modo de renderização
ui.actionsobjectCallbacks de ações registadas
accessobjectRegras atuais de acesso por tipo de jogo
js
window.addEventListener('mindtraining:config', function (event) {
  const config = event.detail

  console.log('Utilizador autenticado:', config.viewer?.loggedIn)
  console.log('Utilizador subscritor:', config.viewer?.subscribed)
  console.log('Regras de acesso ativas:', config.access?.games)
})

Eventos de jogo e navegação

Os eventos seguintes são emitidos durante o gameplay e a navegação. Use-os para analytics, tracking, integrações do host e observabilidade.


mindtraining:game:loaded

Disparado quando: uma sessão ou ecrã de jogo está pronto para interação.

Quando usar: use este evento para acompanhar pageviews internas do jogo, medir que jogos são realmente carregados ou acionar lógica do host com base no tipo de jogo.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo (ex. crossword, sudoku)
gameIdstringIdentificador único do jogo
variantstringVariante do jogo (ex. default, mini)
routestringRota interna
sourcestringOrigem do jogo (ex. today, archive)
js
window.addEventListener('mindtraining:game:loaded', function (event) {
  Analytics.track('mindtraining_game_loaded', event.detail)
})

mindtraining:game:playing

Disparado quando: o utilizador começa a interagir realmente com o jogo (por exemplo, primeiro movimento ou primeira entrada).

Quando usar: use este evento para distinguir entre um jogo carregado e um jogo efetivamente jogado, medir ativação ou acompanhar engagement.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador único do jogo
variantstringVariante do jogo
startedAtstringTimestamp ISO 8601 do início
js
window.addEventListener('mindtraining:game:playing', function (event) {
  Analytics.track('mindtraining_game_playing', event.detail)
})

mindtraining:game:completed

Disparado quando: o utilizador conclui um jogo com sucesso.

Quando usar: use este evento para funis completos, análise de dificuldade ou ranking/gamificação do lado host.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador único do jogo
variantstringVariante do jogo
completedAtstringTimestamp ISO 8601 de conclusão
durationMsnumberDuração da sessão em milissegundos
scorenumberPontuação final (quando aplicável)
js
window.addEventListener('mindtraining:game:completed', function (event) {
  Analytics.track('mindtraining_game_completed', event.detail)
})

mindtraining:game:abandoned

Disparado quando: o utilizador abandona uma sessão de jogo depois de começar a jogar e antes de a concluir.

Quando usar: use este evento para detetar fricção, medir abandono por jogo ou variante, ou melhorar fluxos de retenção.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador único do jogo
variantstringVariante do jogo
durationMsnumberTempo gasto antes do abandono
progressnumberProgresso (0–1) no momento do abandono
js
window.addEventListener('mindtraining:game:abandoned', function (event) {
  Analytics.track('mindtraining_game_abandoned', event.detail)
})

mindtraining:game:state:saved

Disparado quando: o estado do jogo é persistido (por exemplo, para a funcionalidade de “continuar a jogar”).

Quando usar: use este evento para acompanhar retenção, fluxos de continuação ou verificar se o estado guardado está a funcionar corretamente.

event.detail

js
window.addEventListener('mindtraining:game:state:saved', function (event) {
  Analytics.track('mindtraining_game_state_saved', event.detail)
})

mindtraining:access:blocked

Disparado quando: a plataforma deteta que uma superfície (jogo de hoje, arquivo, etc.) está bloqueada para o utilizador.

Quando usar: use este evento para acionar paywalls contextuais, medir procura não satisfeita ou personalizar mensagens do host com base no motivo do bloqueio.

event.detail

js
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

Disparado quando: a rota interna da plataforma muda (por exemplo, navegação dentro da SPA).

Quando usar: use este evento para pageviews virtuais ou para sincronizar analytics com a navegação interna da plataforma.

event.detail

js
window.addEventListener('mindtraining:route:changed', function (event) {
  Analytics.track('mindtraining_route_changed', event.detail)
})

mindtraining:pageview

Disparado quando: a plataforma regista uma visualização navegável relevante para analytics.

Quando usar: use este evento para pageview tracking, relatórios por secção e tipo de jogo ou atribuição da navegação interna da SPA.

event.detail

CampoTipoDescrição
pathnamestringRota atual
titlestringTítulo da página
gameTypestringTipo de jogo, se aplicável
gameIdstringIdentificador do jogo, se aplicável
variantstringVariante do jogo, se aplicável
sourcestringOrigem da vista (por exemplo, today, archive)
js
window.addEventListener('mindtraining:pageview', function (event) {
  Analytics.track('mindtraining_pageview', event.detail)
})

mindtraining:user:action

Disparado quando: o utilizador realiza uma interação importante (por exemplo, clica no arquivo ou seleciona um jogo).

Quando usar: use este evento para acompanhar cliques relevantes, executar experiências ou instrumentar a UI sem ligar cada botão a partir do host.

event.detail

CampoTipoDescrição
actionstringIdentificador da ação (por exemplo, click_archive)
locationstringLocalização na UI (por exemplo, home_header)
gameTypestringTipo de jogo, se aplicável
variantstringVariante do jogo, se aplicável
indexnumberPosição zero-based do bloco/item de jogo clicado na lista renderizada, se aplicável
urlstringURL externo selecionado na navegação, se aplicável

Valores atuais de action:

ValorSignificado
click_playO utilizador clica numa CTA para jogar ou abrir um jogo
click_archiveO utilizador clica numa CTA de arquivo ou histórico
click_startO utilizador inicia um jogo a partir do ecrã intermédio
click_backO utilizador clica numa CTA de voltar ou navegação
click_navO utilizador clica num link de navegação externo

Valores atuais de location:

ValorSuperfície
home_block_gameCard ou bloco de jogo na home
home_block_dynamic_gamesBloco dinâmico de jogos na home
historical_game_blockBloco de jogos históricos ou recentes
intermediate_game_screenEcrã intermédio apresentado antes de entrar num jogo
game_navigationCabeçalho de navegação dentro do jogo
site_navMenu de navegação do site
game_navigation_menuMenu de navegação dentro do jogo
js
window.addEventListener('mindtraining:user:action', function (event) {
  Analytics.track('mindtraining_user_action', event.detail)
})

mindtraining:share:requested

Disparado quando: o utilizador tenta partilhar conteúdo da plataforma.

Quando usar: use este evento para analytics de intenção de partilha ou para ligar ao fluxo nativo de partilha do host.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador do jogo
urlstringURL para partilhar
titlestringTítulo para partilhar
js
window.addEventListener('mindtraining:share:requested', function (event) {
  Analytics.track('mindtraining_share_requested', event.detail)
})

mindtraining:error

Disparado quando: ocorre um erro de fluxo, carregamento ou interação relevante para o host.

Quando usar: use este evento para observabilidade, alertas ou UI de fallback no host.

event.detail

CampoTipoDescrição
scopestringÂmbito do erro (por exemplo, game-load)
codestringCódigo do erro (por exemplo, GAME_DATA_FETCH_FAILED)
messagestringMensagem legível
recoverablebooleanSe o utilizador pode recuperar do erro
js
window.addEventListener('mindtraining:error', function (event) {
  Analytics.track('mindtraining_error', event.detail)
  if (!event.detail.recoverable) {
    ErrorUI.show(event.detail)
  }
})

Eventos recomendados para analytics

Uma abordagem prática para analytics do host é ouvir:

  1. mindtraining:ready - para saber quando é seguro inicializar
  2. mindtraining:config - para acompanhar mudanças de configuração
  3. mindtraining:game:loaded - para medir carregamentos de jogos
  4. mindtraining:pageview - para acompanhar pageviews
  5. mindtraining:game:playing - para medir ativação
  6. mindtraining:game:completed - para medir conclusões
  7. mindtraining:access:blocked - para medir procura bloqueada
  8. mindtraining:error - para monitorizar erros
js
window.addEventListener('mindtraining:game:loaded', function (event) {
  Analytics.track('mindtraining_game_loaded', event.detail)
})
window.addEventListener('mindtraining:game:playing', function (event) {
  Analytics.track('mindtraining_game_playing', event.detail)
})
window.addEventListener('mindtraining:pageview', function (event) {
  Analytics.track('mindtraining_pageview', event.detail)
})
window.addEventListener('mindtraining:access:blocked', function (event) {
  Analytics.track('mindtraining_access_blocked', event.detail)
})

Client integration documentation maintained in-repo.