TsgcWebPush_ClientMétodos › SendNotification

SendNotification Método

Cifra el payload con aes128gcm, firma la solicitud con VAPID y la envía mediante POST al endpoint de suscripción del navegador.

Sintaxis

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

Parámetros

NombreTipoDescripción
aPushSubscriptionconst TsgcHTTP_API_WebPush_PushSubscriptionRegistro 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.
aTextconst stringContenido 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.

Observaciones

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.

Ejemplo

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;

Volver a Métodos