TsgcWebPush_ClientMethods › SendNotification

SendNotification Method

Cifra il payload con aes128gcm, firma la richiesta con VAPID e la invia tramite POST all'endpoint di sottoscrizione del browser.

Sintassi

procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);

Parametri

NomeTipoDescrizione
aPushSubscriptionconst TsgcHTTP_API_WebPush_PushSubscriptionRecord 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.
aTextconst stringPayload 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.

Note

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.

Esempio

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;

Torna ai Metodi