TsgcWebPush_Client › Métodos › SendNotification
Criptografa o payload com aes128gcm, assina a requisição com VAPID e faz o POST dela ao endpoint de assinatura do navegador.
procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);
| Name | Type | Descrição |
|---|---|---|
aPushSubscription | const TsgcHTTP_API_WebPush_PushSubscription | Registro 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. |
aText | const string | Carga ú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. |
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.
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;