TsgcWebPush_Client › Métodos › SendNotification
Cifra el payload con aes128gcm, firma la solicitud con VAPID y la envía mediante POST al endpoint de suscripción del navegador.
procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);
| Nombre | Tipo | Descripción |
|---|---|---|
aPushSubscription | const TsgcHTTP_API_WebPush_PushSubscription | Registro de suscripción devuelto por el navegador en el momento del registro — lleva Endpoint (la URL del servicio push al que hacer POST), PublicKey (clave pública P-256 del agente de usuario, p256dh, codificada en Base64URL) y AuthSecret (secreto auth de 16 bytes, codificado en Base64URL) utilizados para derivar la clave de cifrado de contenido por mensaje. |
aText | const string | Contenido en texto plano que se entregará al navegador (normalmente un documento JSON interpretado por el Service Worker). El valor se codifica en UTF-8 y se cifra con aes128gcm antes de enviarse; una cadena vacía envía una notificación sin contenido. |
Envío Web Push en una sola llamada (RFC 8030 + RFC 8291). El método valida que las claves VAPID estén configuradas y que aPushSubscription contenga un Endpoint, PublicKey y AuthSecret; calcula un secreto compartido ECDH contra la clave pública del agente de usuario; deriva la clave de cifrado de contenido y el nonce con HKDF; cifra aText con aes128gcm; construye un JWT VAPID (ES256) firmado con la clave privada PEM y lo añade como cabecera Authorization; coloca la clave pública DER en la cabecera Crypto-Key; y realiza un POST del texto cifrado binario al endpoint de suscripción. Las claves faltantes generan una excepción EsgcWebSocketException; el servicio push devuelve 201/202 en caso de éxito, 404/410 cuando la suscripción ha expirado y debe eliminarse, o 429 cuando se aplica throttling.
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;