TsgcWebPush_Client › Methods › SendNotification
Cifra il payload con aes128gcm, firma la richiesta con VAPID e la invia tramite POST all'endpoint di sottoscrizione del browser.
procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);
| Nome | Tipo | Descrizione |
|---|---|---|
aPushSubscription | const TsgcHTTP_API_WebPush_PushSubscription | Record di sottoscrizione restituito dal browser al momento della registrazione — contiene Endpoint (l'URL del servizio push a cui inviare la POST), PublicKey (chiave pubblica P-256 dello user-agent, p256dh, codificata in Base64URL) e AuthSecret (segreto auth di 16 byte, codificato in Base64URL) utilizzati per derivare la chiave di cifratura del contenuto per messaggio. |
aText | const string | Payload in chiaro da consegnare al browser (tipicamente un documento JSON interpretato dal Service Worker). Il valore viene codificato in UTF-8 e cifrato con aes128gcm prima dell'invio; una stringa vuota invia una notifica senza payload. |
Invio Web Push con singola chiamata (RFC 8030 + RFC 8291). Il metodo verifica che le chiavi VAPID siano configurate e che aPushSubscription contenga un Endpoint, PublicKey e AuthSecret; calcola un segreto condiviso ECDH rispetto alla chiave pubblica dell'user-agent; deriva la chiave di cifratura del contenuto e il nonce con HKDF; cifra aText con aes128gcm; costruisce un JWT VAPID (ES256) firmato con la chiave privata PEM e lo aggiunge come header Authorization; inserisce la chiave pubblica DER nell'header Crypto-Key; e invia via POST il testo cifrato binario all'endpoint della sottoscrizione. Le chiavi mancanti sollevano un'eccezione EsgcWebSocketException; il servizio push restituisce 201/202 in caso di successo, 404/410 quando la sottoscrizione è scaduta e deve essere rimossa, o 429 quando viene applicato il throttling.
var
oSubscription: TsgcHTTP_API_WebPush_PushSubscription;
begin
oSubscription := TsgcHTTP_API_WebPush_PushSubscription.Create;
try
oSubscription.Endpoint := 'https://fcm.googleapis.com/fcm/send/...';
oSubscription.PublicKey := 'BASE64URL_P256DH';
oSubscription.AuthSecret := 'BASE64URL_AUTH';
sgcWebPush_Client1.VAPID.PEM.PrivateKey.Text := '-----BEGIN PRIVATE KEY-----...';
sgcWebPush_Client1.VAPID.DER.PrivateKey := 'BASE64URL_PRIVATE_KEY';
sgcWebPush_Client1.VAPID.DER.PublicKey := 'BASE64URL_PUBLIC_KEY';
sgcWebPush_Client1.VAPID.Details.MailTo := 'info@esegece.com';
sgcWebPush_Client1.SendNotification(oSubscription,
'{"title":"eSeGeCe","body":"Hello from sgcWebSockets!"}');
finally
oSubscription.Free;
end;
end;