TsgcWebPush_ClientMéthodes › SendNotification

SendNotification Méthode

Chiffre la charge utile avec aes128gcm, signe la requête avec VAPID et la publie sur le point de terminaison d'abonnement du navigateur.

Syntaxe

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

Paramètres

NomTypeDescription
aPushSubscription const TsgcHTTP_API_WebPush_PushSubscriptionEnregistrement 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.
aTextconst stringCharge 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.

Remarques

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.

Exemple

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;

Retour aux méthodes