Intercepción de navegación
Todos los sitios heredan el callback opcional ui.actions.navigate. Recibe una solicitud serializable antes de navegar dentro del SDK y funciona en los modos web y app.
Devolvé handled cuando el host se haga cargo, incluso para cancelar. Devolvé continue para ejecutar el comportamiento del SDK. Se admiten promesas y el SDK espera la respuesta. Solo continue permite continuar: las excepciones, promesas rechazadas y respuestas inválidas cancelan la solicitud y registran un error. Sin callback se conserva el comportamiento existente.
MindtrainingPlatform.init('mindtraining', {
ui: {
actions: {
navigate: function (request) {
if (request.destination === 'statistics') {
nativeBridge.openStatistics(request)
return 'handled'
}
return 'continue'
},
},
},
})Contrato
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
}Para las rutas internas, url respeta basepath y routing normal/hash/query. path es la ruta del history del SDK. Una superficie sin ruta no tiene URL de destino. Volver por history usa destination: history y omite url/path, porque el navegador no expone la URL anterior. fromUrl es la URL absoluta actual.
destination: home, gameEntry, game, archive, statistics, route, history, external; surface: homeArchive, gameArchive, statistics, statisticsOverview, howToPlay, gameSettings, gameCompletion, achievementGameDetail, achievementUnlock.
Cobertura y límites
Se interceptan las rutas del SDK, sus botones de volver, ayuda, ajustes, archivo, estadísticas, resultados y acciones del detalle de logros. Los botones de enlaces externos y referencias del quiz también pasan por el callback. Los enlaces nativos normales dentro del límite de página del SDK participan después de los manejadores de acceso y del enlace.
Atrás/Adelante del navegador, recarga, entrada directa de URL, descargas, enlaces a fragmentos y clics modificados o centrales siguen bajo control del navegador. Login, registro, suscripción, APIs de compartir, controles de juego, confirmaciones y avisos automáticos de logros mantienen sus contratos. Cerrar un aviso de logro es una acción de superficie.
El callback tiene prioridad sobre las notificaciones internas antiguas de openUrl, evitando navegación duplicada. Los enlaces externos y el quiz siguen usando openUrl como alternativa al devolver continue. Los controles de acceso y paywall mantienen su orden; interceptar nunca concede acceso.
Las respuestas pendientes de rutas/superficies se descartan si otra solicitud las reemplaza. No hay timeout ni continuación automática. Un flujo compuesto puede tener varias intenciones: cerrar ajustes y luego abrir ayuda, por ejemplo. La sincronización interna del history virtual y la restauración del navegador no generan una segunda solicitud.
Para abrir una pestaña externa desde el navegador, respondé sincrónicamente: una continuación asíncrona puede perder la activación del usuario. El puente nativo puede hacerse cargo. No llames recursivamente a una API de navegación del SDK desde este callback; devolvé continue.
Actualización en ejecución
MindtrainingPlatform.updateConfig({ ui: { actions: { navigate: () => 'continue' } } })
MindtrainingPlatform.updateConfig({ ui: { actions: { navigate: undefined } } })