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-keysVypíš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 |
|---|---|
|
|
| Zapína lokálny Web Push konektor. |
| VAPID verejný kľúč (zdieľaný aj s prehliadačom ako |
| VAPID privátny kľúč — udržiavajte v tajnosti. |
|
|
Tok push notifikácie
Prehliadač sa prihlási na Web Push cez
PushManager.subscribe()použitím VAPID verejného kľúča SmartWebu.Prehliadač pošle svoj odber (endpoint URL, kľúč
p256dh, tajomstvoauth) do SmartWebu (typicky cez REST API alebo RPC).SmartWeb uloží odber priradený k relácii (session) používateľa alebo k jeho D2000 identite.
ESL skript v D2000 zavolá zaregistrovanú RPC metódu na strane SmartWebu.
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.
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.