Interception de navigation
Tous les sites héritent du callback facultatif ui.actions.navigate. Il reçoit une requête sérialisable avant la navigation du SDK, en mode web ou app.
Retournez handled lorsque le site hôte prend le relais, y compris pour annuler. Retournez continue pour exécuter le comportement du SDK. Les promesses sont acceptées et attendues. Seul continue autorise la navigation : exceptions, rejets et réponses invalides annulent la requête et journalisent une erreur. Sans callback, le comportement existant est conservé.
MindtrainingPlatform.init('mindtraining', {
ui: {
actions: {
navigate: function (request) {
if (request.destination === 'statistics') {
nativeBridge.openStatistics(request)
return 'handled'
}
return 'continue'
},
},
},
})Contrat
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
}Pour une route interne, url respecte le basepath et le routage normal/hash/query ; path est le chemin du SDK. Une surface sans route ne possède pas de destination URL. Le retour utilise destination: history sans url/path, car le navigateur ne révèle pas la précédente URL. fromUrl est l’URL absolue actuelle.
destination: home, gameEntry, game, archive, statistics, route, history, external; surface: homeArchive, gameArchive, statistics, statisticsOverview, howToPlay, gameSettings, gameCompletion, achievementGameDetail, achievementUnlock.
Couverture et limites
Les routes du SDK, boutons de retour, aide, réglages, archives, statistiques, résultats et actions du détail des récompenses sont interceptés. Les boutons de liens externes et les références du quiz participent aussi, ainsi que les liens natifs ordinaires dans la page du SDK, après les gestionnaires du lien et des droits.
Précédent/Suivant du navigateur, rechargement, URL saisie directement, téléchargements, ancres et clics modifiés ou centraux restent gérés par le navigateur. Connexion, inscription, abonnement, API de partage, commandes de jeu, confirmations et notifications automatiques de récompenses gardent leur contrat. Fermer une notification est une action de surface.
Le callback remplace les anciennes notifications internes openUrl pour éviter les doublons. Les liens externes et le quiz utilisent toujours openUrl après continue. Les contrôles d’accès et le paywall conservent leur ordre ; intercepter ne donne aucun droit supplémentaire.
Les décisions en attente pour les routes/surfaces sont ignorées lorsqu’une nouvelle requête les remplace. Aucun délai ni passage automatique n’est prévu. Un parcours composé peut avoir plusieurs intentions. La synchronisation de l’historique virtuel et sa restauration ne déclenchent pas une seconde requête.
Pour ouvrir un onglet externe dans le navigateur, répondez de façon synchrone afin de conserver l’activation utilisateur. Un pont natif peut gérer la requête. Ne rappelez pas récursivement une API de navigation du SDK depuis ce callback ; retournez continue.
Mise à jour dynamique
MindtrainingPlatform.updateConfig({ ui: { actions: { navigate: () => 'continue' } } })
MindtrainingPlatform.updateConfig({ ui: { actions: { navigate: undefined } } })