Konfigurácia Web Push

Konfigurácia Web Push

SmartWeb dokáže doručovať push notifikácie do prehliadača (aj do zatvorených záložiek a PWA-inštalovaných aplikácií) pomocou protokolu VAPID (RFC 8292, W3C Web Push API). D2000 ESL skript spustí notifikáciu zavolaním RPC na strane SmartWebu; Web Push konektor následne zostaví VAPID push požiadavku a prepošle ju na endpointy prehliadačov uložené v registri odberov SmartWebu. Kryptografiu eliptických kriviek zabezpečuje Bouncy Castle.

VAPID pár kľúčov

VAPID vyžaduje EC (P-256) pár kľúčov. Najjednoduchší spôsob jeho vygenerovania je cez CLI web-push:

npx web-push generate-vapid-keys

Vypíše niečo ako:

======================================= Public Key: BK3b8ZvQfcTq... Private Key: 7Tz2xyz... =======================================

Oba kľúče sú reťazce zakódované v URL-safe Base64.

Konfigurácia

Nakonfigurujte VAPID kľúče a povoľte Web Push konektor:

smartweb: application: connectors: webPush: mode: LOCAL # LOCAL | REMOTE local: enabled: true api: vapid: publicKey: "BK3b8ZvQfcTq..." privateKey: "7Tz2xyz..." subject: "mailto:admin@example.com"

Vlastnosť

Popis

Vlastnosť

Popis

connectors.webPush.mode

LOCAL — push správy sa odosielajú z tohto SmartWeb procesu. REMOTE — delegovanie na vzdialený SmartWeb uzol.

connectors.webPush.local.enabled

Zapína lokálny Web Push konektor.

api.vapid.publicKey

VAPID verejný kľúč (zdieľaný aj s prehliadačom ako applicationServerKey).

api.vapid.privateKey

VAPID privátny kľúč — udržiavajte v tajnosti.

api.vapid.subject

mailto: URI alebo HTTPS URL identifikujúce SmartWeb aplikáciu; vyžadované podľa RFC 8292.

Tok push notifikácie

  1. Prehliadač sa prihlási na Web Push cez PushManager.subscribe() použitím VAPID verejného kľúča SmartWebu.

  2. Prehliadač pošle svoj odber (endpoint URL, kľúč p256dh, tajomstvo auth) do SmartWebu (typicky cez REST API alebo RPC).

  3. SmartWeb uloží odber priradený k relácii (session) používateľa alebo k jeho D2000 identite.

  4. ESL skript v D2000 zavolá zaregistrovanú RPC metódu na strane SmartWebu.

  5. Konektor zašifruje payload, podpíše ho VAPID privátnym kľúčom a pošle ho metódou POST na každý uložený endpoint prehliadača.

  6. Prehliadač zobrazí notifikáciu — aj keď je záložka SmartWebu zatvorená.

Integrácia na strane prehliadača

// Registrácia service workera a prihlásenie na Web Push const registration = await navigator.serviceWorker.register('/sw.js'); const subscription = await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: 'BK3b8ZvQfcTq...' // VAPID verejný kľúč SmartWebu }); // Odoslanie odberu do SmartWebu await fetch('/api/web/rest/v0/d2/rpc', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken }, body: JSON.stringify({ event: 'E.PushSubscribe', method: 'Subscribe', params: { endpoint: subscription.endpoint, p256dh: btoa(String.fromCharCode( ...new Uint8Array(subscription.getKey('p256dh')))), auth: btoa(String.fromCharCode( ...new Uint8Array(subscription.getKey('auth')))) } }) });

[!NOTE] Ak endpoint prehliadača vráti HTTP 410 Gone (používateľ odber zrušil alebo ho prehliadač vymazal), SmartWeb odber automaticky odstráni zo svojho registra.