Intercettazione della navigazione
Tutti i siti ereditano il callback facoltativo ui.actions.navigate, che riceve una richiesta serializzabile prima della navigazione SDK, nelle modalità web e app.
Restituire handled quando l’host gestisce o annulla la richiesta; continue per eseguire il comportamento SDK. Le promesse sono supportate e attese. Solo continue procede: eccezioni, rifiuti e risposte non valide annullano la richiesta e registrano un errore. Senza callback il comportamento resta invariato.
MindtrainingPlatform.init('mindtraining', {
ui: {
actions: {
navigate: function (request) {
if (request.destination === 'statistics') {
nativeBridge.openStatistics(request)
return 'handled'
}
return 'continue'
},
},
},
})Contratto
type NavigationDecision = 'handled' | 'continue'
type NavigationRequest = {
kind: 'route' | 'surface' | 'external'
action: 'push' | 'replace' | 'back' | 'forward' | 'go' | 'open' | 'close'
destination: string
path?: string
url?: string
fromUrl: string
surface?: string
presentation?: string
gameConfigurationId?: string
gameType?: string
variant?: string
date?: string
target?: string
}Per i percorsi interni, url rispetta basepath e routing normale/hash/query; path è il percorso SDK. Le superfici senza percorso non hanno URL di destinazione. Indietro usa destination: history senza url/path, perché il browser non espone l’URL precedente. fromUrl è l’URL assoluto attuale.
destination: home, gameEntry, game, archive, statistics, route, history, external; surface: homeArchive, gameArchive, statistics, statisticsOverview, howToPlay, gameSettings, gameCompletion, achievementGameDetail, achievementUnlock.
Copertura e limiti
Sono intercettati percorsi SDK, pulsanti Indietro, aiuto, impostazioni, archivi, statistiche, risultati e azioni del dettaglio dei traguardi. Partecipano anche i pulsanti per collegamenti esterni e riferimenti del quiz, oltre ai normali link nativi nella pagina SDK dopo i gestori di accesso e del link.
Indietro/Avanti del browser, ricarica, URL diretti, download, ancore e clic modificati o centrali restano gestiti dal browser. Accesso, registrazione, abbonamento, API di condivisione, comandi di gioco, conferme e notifiche automatiche dei traguardi mantengono i contratti esistenti. Chiudere una notifica è un’azione di superficie.
Il callback sostituisce le precedenti notifiche interne openUrl, evitando duplicati. Link esterni e quiz continuano a usare openUrl dopo continue. Accesso e paywall mantengono il loro ordine; l’intercettazione non concede accesso.
Le decisioni pendenti di percorsi/superfici vengono scartate quando una nuova richiesta le sostituisce. Nessun timeout o proseguimento automatico. Un flusso composto può produrre più intenzioni. La sincronizzazione interna e il ripristino della cronologia virtuale non generano una seconda richiesta.
Per aprire una scheda esterna nel browser, rispondere in modo sincrono per preservare l’attivazione utente. Un bridge nativo può gestire la richiesta. Non chiamare ricorsivamente API di navigazione SDK dal callback; restituire continue.
Aggiornamento dinamico
MindtrainingPlatform.updateConfig({ ui: { actions: { navigate: () => 'continue' } } })
MindtrainingPlatform.updateConfig({ ui: { actions: { navigate: undefined } } })