TsgcWebPush_ClientMétodos › SendNotification

SendNotification Method

Criptografa o payload com aes128gcm, assina a requisição com VAPID e faz o POST dela ao endpoint de assinatura do navegador.

Sintaxe

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

Parâmetros

NameTypeDescrição
aPushSubscriptionconst TsgcHTTP_API_WebPush_PushSubscriptionRegistro de assinatura retornado pelo navegador no momento do registro — carrega Endpoint (a URL do serviço de push para a qual fazer POST), PublicKey (chave pública P-256 do user-agent, p256dh, codificada em Base64URL) e AuthSecret (segredo auth de 16 bytes, codificado em Base64URL) usados para derivar a chave de criptografia de conteúdo por mensagem.
aTextconst stringCarga útil em texto simples a entregar ao navegador (tipicamente um documento JSON interpretado pelo Service Worker). O valor é codificado em UTF-8 e criptografado com aes128gcm antes de ser enviado; uma string vazia envia uma notificação sem carga útil.

Observações

Envio de Web Push em chamada única (RFC 8030 + RFC 8291). O método valida que as chaves VAPID estão configuradas e que aPushSubscription contém um Endpoint, PublicKey e AuthSecret; computa um segredo compartilhado ECDH contra a chave pública do user-agent; deriva a chave de criptografia de conteúdo e o nonce com HKDF; criptografa aText com aes128gcm; constrói um VAPID JWT (ES256) assinado com a chave privada PEM e o adiciona como cabeçalho Authorization; coloca a chave pública DER no cabeçalho Crypto-Key; e faz POST do ciphertext binário ao endpoint da assinatura. Chaves ausentes geram uma EsgcWebSocketException; o serviço de push retorna 201/202 em caso de sucesso, 404/410 quando a assinatura expirou e deve ser descartada, ou 429 quando há throttling aplicado.

Exemplo

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;

Voltar para Métodos