TsgcWebPush_Client › Methoden › SendNotification
Verschlüsselt die Nutzlast mit aes128gcm, signiert die Anforderung mit VAPID und sendet sie per POST an den Browser-Subscription-Endpunkt.
procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);
| Name | Typ | Beschreibung |
|---|---|---|
aPushSubscription | const TsgcHTTP_API_WebPush_PushSubscription | Subscription-Datensatz, der vom Browser zur Registrierungszeit zurückgegeben wird — trägt Endpoint (die Push-Dienst-URL, an die gePOSTet werden soll), PublicKey (öffentlicher User-Agent-P-256-Schlüssel, p256dh, Base64URL-codiert) und AuthSecret (16-Byte-auth-Secret, Base64URL-codiert), die zum Ableiten des Content-Encryption-Schlüssels pro Nachricht verwendet werden. |
aText | const string | Klartext-Payload, das an den Browser geliefert wird (typischerweise ein JSON-Dokument, das vom Service Worker interpretiert wird). Der Wert wird UTF-8-codiert und vor dem Senden mit aes128gcm verschlüsselt; eine leere Zeichenfolge sendet eine Benachrichtigung ohne Payload. |
Einmaliger Web-Push-Versand (RFC 8030 + RFC 8291). Die Methode validiert, dass VAPID-Schlüssel konfiguriert sind und dass aPushSubscription einen Endpoint, PublicKey und AuthSecret enthält; berechnet ein gemeinsames ECDH-Secret gegen den öffentlichen Schlüssel des User-Agents; leitet den Inhaltsverschlüsselungsschlüssel und die Nonce mit HKDF ab; verschlüsselt aText mit aes128gcm; erstellt ein VAPID-JWT (ES256), das mit dem privaten PEM-Schlüssel signiert ist, und fügt es als Authorization-Header hinzu; platziert den öffentlichen DER-Schlüssel im Crypto-Key-Header; und sendet den binären Chiffretext per POST an den Subscription-Endpunkt. Fehlende Schlüssel lösen eine EsgcWebSocketException aus; der Push-Dienst gibt bei Erfolg 201/202 zurück, 404/410, wenn das Abonnement abgelaufen ist und verworfen werden muss, oder 429, wenn eine Drosselung angewendet wird.
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;