TsgcWebPush_ClientMetody › SendNotification

SendNotification Metoda

Szyfruje ładunek za pomocą aes128gcm, podpisuje żądanie przy użyciu VAPID i wysyła je metodą POST do punktu końcowego subskrypcji przeglądarki.

Składnia

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

Parametry

NazwaTypOpis
aPushSubscriptionconst TsgcHTTP_API_WebPush_PushSubscriptionRekord subskrypcji zwracany przez przeglądarkę w momencie rejestracji — zawiera Endpoint (adres URL usługi push, na który należy wysłać żądanie POST), PublicKey (klucz publiczny P-256 agenta użytkownika, p256dh, zakodowany w Base64URL) oraz AuthSecret (16-bajtowy sekret auth, zakodowany w Base64URL), używany do wyprowadzenia klucza szyfrowania treści dla każdej wiadomości.
aTextconst stringŁadunek tekstowy w postaci zwykłego tekstu do dostarczenia do przeglądarki (zazwyczaj dokument JSON interpretowany przez Service Worker). Wartość jest kodowana w UTF-8 i szyfrowana za pomocą aes128gcm przed wysłaniem; pusty ciąg znaków powoduje wysłanie powiadomienia bez ładunku.

Uwagi

Jednokrotne wysyłanie Web Push (RFC 8030 + RFC 8291). Metoda weryfikuje, czy klucze VAPID są skonfigurowane i czy aPushSubscription zawiera Endpoint, PublicKey i AuthSecret; oblicza wspólny sekret ECDH względem klucza publicznego agenta użytkownika; wyprowadza klucz szyfrowania treści i nonce za pomocą HKDF; szyfruje aText algorytmem aes128gcm; buduje JWT VAPID (ES256) podpisany kluczem prywatnym PEM i dodaje go jako nagłówek Authorization; umieszcza klucz publiczny DER w nagłówku Crypto-Key; oraz wysyła zaszyfrowany tekst binarny do punktu końcowego subskrypcji metodą POST. Brakujące klucze zgłaszają wyjątek EsgcWebSocketException; usługa push zwraca 201/202 w przypadku sukcesu, 404/410 gdy subskrypcja wygasła i musi zostać usunięta, lub 429 gdy stosowane jest ograniczenie szybkości.

Przykład

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;

Powrót do metod