TsgcWebPush_ClientMethoden › SendNotification

SendNotification Methode

Versleutelt de payload met aes128gcm, ondertekent de aanvraag met VAPID en stuurt deze via POST naar het subscriptie-eindpunt van de browser.

Syntaxis

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

Parameters

NaamTypeBeschrijving
aPushSubscriptionconst TsgcHTTP_API_WebPush_PushSubscriptionAbonnementsrecord dat door de browser wordt geretourneerd bij registratie — bevat Endpoint (de push-service-URL waarnaar POST-verzoeken worden gestuurd), PublicKey (openbare P-256-sleutel van de user-agent, p256dh, Base64URL-gecodeerd) en AuthSecret (16-byte auth-geheim, Base64URL-gecodeerd) dat wordt gebruikt om de per-bericht inhoudsversleutelingssleutel af te leiden.
aTextconst stringLeesbare tekst-payload om aan de browser te leveren (doorgaans een JSON-document dat door de Service Worker wordt geïnterpreteerd). De waarde is UTF-8 gecodeerd en versleuteld met aes128gcm voordat deze wordt verzonden; een lege tekenreeks stuurt een melding zonder payload.

Opmerkingen

Web Push-verzending in één aanroep (RFC 8030 + RFC 8291). De methode valideert dat de VAPID-sleutels zijn geconfigureerd en dat aPushSubscription een Endpoint, PublicKey en AuthSecret bevat; berekent een ECDH-gedeeld geheim tegen de publieke sleutel van de user-agent; leidt de content-encryptiesleutel en nonce af met HKDF; versleutelt aText met aes128gcm; bouwt een VAPID JWT (ES256) ondertekend met de PEM-privésleutel en voegt deze toe als de Authorization-header; plaatst de DER-publieke sleutel in de Crypto-Key-header; en POST de binaire ciphertext naar het abonnementseindpunt. Ontbrekende sleutels genereren een EsgcWebSocketException; de pushservice retourneert 201/202 bij succes, 404/410 wanneer het abonnement is verlopen en moet worden verwijderd, of 429 wanneer throttling wordt toegepast.

Voorbeeld

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;

Terug naar methoden