Appearance
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 viaEVENTS.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
EVENTSdansapp-sdk.d.ts. emitViewers(null, ...)diffuse à tous ; passe un tableau d'Userpour 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 tesemitViewers: ne compte pas sur une réponse de sa part.