Skip to content

kapp.plugin (pont overlay ↔ page viewers)

Une appli peut avoir une page viewers (interface jouée par les spectateurs) et/ou une page streamer, en plus de l'overlay. kapp.plugin est le pont temps réel entre ces contextes.

Déclaration (infos.json)

  • viewers-plugin / viewers-plugin-index / viewers-plugin-height — la page jouée par les viewers.
  • streamer-plugin / streamer-plugin-index — la page côté streamer.

Service

  • await emitViewers(users: User[] | null, event: string, data = {}): Promise<void> — émet un événement vers la page des viewers. users = null → tous ; users = [...] → ciblés.
  • await emitStreamer(event: string, data = {}): Promise<void> — émet vers la page streamer (reçu via EVENTS.PLUGIN_STREAMER).
  • await callStreamer(): Promise<void> — notifie le streamer (sans données).
  • getViewersPluginUrl(): string — URL publique de la page viewers ({host}/viewers/{channel}/{app_slug}).

Événements reçus

  • EVENTS.PLUGIN_VIEWERS — message d'un viewer : { viewer: User, event: string, data?: any }.
  • EVENTS.PLUGIN_STREAMER — message du streamer : { event: string, data?: any }.

Pattern (overlay envoie aux viewers, écoute leurs réponses)

js
(async function () {
    kapp.events.on(kapp.plugin.EVENTS?.PLUGIN_VIEWERS ?? 'plugin.viewers', ({ viewer, event, data }) => {
        if (event === 'answer') console.log(viewer.login, 'a répondu', data);
    });

    await kapp.plugin.emitViewers(null, 'question', { text: 'Prêt ?' });
})();

Pièges

  • Vérifie la forme exacte des events et de EVENTS dans app-sdk.d.ts.
  • emitViewers(null, ...) diffuse à tous ; passe un tableau d'User pour cibler.
  • Un viewer qui a interdit ton appli (viewers-optout, cf. reference/launch-modes.md) n'a plus accès à ta page viewers et ne reçoit plus tes emitViewers : ne compte pas sur une réponse de sa part.