Skip to content

Cycle de vie d'une appli

Une appli est persistante : elle démarre quand le streamer la lance, vit tant qu'elle n'est pas terminée, puis se ferme via finish() (normal) ou abort() (interruption).

Démarrage

  1. index.html charge le SDK (https://kappapps.app/overlay/app/appli-2.0.js).
  2. Le SDK initialise l'instance, puis dispatch l'event AppliLoaded sur document.
  3. Ton index.html écoute cet event et injecte style.css + script.js. À partir de là, kapp / k sont disponibles.
  4. script.js exécute ta logique (forme habituelle : (async function () { ... })();).
html
<script src="https://kappapps.app/overlay/app/appli-2.0.js"></script>
<script>
  document.addEventListener('AppliLoaded', async () => {
    const style = document.createElement('link');
    style.rel = 'stylesheet'; style.href = 'style.css';
    const script = document.createElement('script');
    script.src = 'script.js';
    if (!kapp.version.is_submitted) {            // cache-bust en dev
      style.href += '?v=' + Date.now();
      script.src  += '?v=' + Date.now();
    }
    document.head.appendChild(style);
    document.head.appendChild(script);
  });
</script>

Affichage

  • kapp.display(): void — affiche la fenêtre de l'appli.
  • kapp.undisplay(): void — la masque (sans terminer l'exécution ; appelé automatiquement par finish()).
  • Une appli backtask (sans UI) n'a pas besoin de display().

Fin

  • await kapp.finish(result?): Promise<void> — fin normale. Envoie d'abord les rewards (kapp.rewards.sendRewards()), puis undisplay(), puis exécute les hooks de sortie, puis clôt. Le result optionnel est renvoyé à l'appli qui a lancé celle-ci via kapp.apps.run (voir app-to-app.md) ; il est ignoré pour une appli lancée normalement.
  • await kapp.abort(reason = null): Promise<void> — interruption (erreur, donnée manquante). N'envoie pas les rewards.

Hooks de sortie

  • kapp.onBeforeExit(status = '*', handler): voidstatus'finish' | 'abort' | '*'. handler: () => void | Promise<void> (sync et async sont attendus).
  • kapp.onBeforeFinish(handler): void — raccourci pour onBeforeExit('finish', handler).
  • kapp.onBeforeAbort(handler): void — raccourci pour onBeforeExit('abort', handler).
js
(async function () {
    kapp.onBeforeFinish(async () => {
        await kapp.dataStorage.set({ lastRun: Date.now() });   // persiste avant de fermer
    });

    kapp.display();
    // ... logique de l'appli ...
    await kapp.finish();   // explicite : sans ça, l'appli reste ouverte
})();

Pièges

  • finish() est explicite : l'appli ne se ferme pas quand script.js finit de s'exécuter.
  • Pas de window.executeAppFunction (c'est le contrat widget).
  • Les rewards ne partent qu'au finish() — un abort() les abandonne.