TsgcWebPush_Client › Méthodes › SendNotification
Chiffre la charge utile avec aes128gcm, signe la requête avec VAPID et la publie sur le point de terminaison d'abonnement du navigateur.
procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);
| Nom | Type | Description |
|---|---|---|
aPushSubscription
| const TsgcHTTP_API_WebPush_PushSubscription | Enregistrement d'abonnement renvoyé par le navigateur au moment de l'enregistrement — contient Endpoint (l'URL du service push vers laquelle effectuer le POST), PublicKey (clé publique P-256 de l'agent utilisateur, p256dh, encodée en Base64URL) et AuthSecret (secret auth de 16 octets, encodé en Base64URL) utilisés pour dériver la clé de chiffrement de contenu par message.
|
aText | const string | Charge utile en texte clair à livrer au navigateur (généralement un document JSON interprété par le Service Worker). La valeur est encodée en UTF-8 et chiffrée avec aes128gcm avant d'être envoyée ; une chaîne vide envoie une notification sans charge utile. |
Envoi Web Push en un seul appel (RFC 8030 + RFC 8291). La méthode valide que les clés VAPID sont configurées et que aPushSubscription contient un Endpoint, une PublicKey et un AuthSecret ; calcule un secret partagé ECDH par rapport à la clé publique de l'agent utilisateur ; dérive la clé de chiffrement du contenu et le nonce avec HKDF ; chiffre aText avec aes128gcm ; construit un JWT VAPID (ES256) signé avec la clé privée PEM et l'ajoute comme en-tête Authorization ; place la clé publique DER dans l'en-tête Crypto-Key ; et envoie le texte chiffré binaire au point de terminaison de l'abonnement via POST. Les clés manquantes lèvent une EsgcWebSocketException ; le service push retourne 201/202 en cas de succès, 404/410 lorsque l'abonnement a expiré et doit être abandonné, ou 429 lorsque la limitation est appliquée.
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;