TsgcWebPush_ClientYöntemler › SendNotification

SendNotification Yöntem

Yükü aes128gcm ile şifreler, isteği VAPID ile imzalar ve tarayıcı abonelik uç noktasına POST'lar.

Sözdizimi

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

Parametreler

NameTypeAçıklama
aPushSubscriptionconst TsgcHTTP_API_WebPush_PushSubscriptionKayıt sırasında tarayıcı tarafından döndürülen abonelik kaydı — Endpoint (POST yapılacak push hizmeti URL'si), PublicKey (user-agent P-256 ortak anahtarı, p256dh, Base64URL ile kodlanmış) ve mesaj başına içerik şifreleme anahtarını türetmek için kullanılan AuthSecret (16 baytlık auth gizli anahtarı, Base64URL ile kodlanmış) değerlerini taşır.
aTextconst stringTarayıcıya teslim edilecek düz metin yük (genellikle Service Worker tarafından yorumlanan bir JSON belgesi). Değer UTF-8 ile kodlanır ve gönderilmeden önce aes128gcm ile şifrelenir; boş bir dize, yük olmadan bir bildirim gönderir.

Remarks

Tek çağrılı Web Push gönderimi (RFC 8030 + RFC 8291). Yöntem, VAPID anahtarlarının yapılandırıldığını ve aPushSubscription'ın bir Endpoint, PublicKey ve AuthSecret içerdiğini doğrular; user-agent genel anahtarına karşı bir ECDH paylaşılan gizli anahtarı hesaplar; içerik şifreleme anahtarını ve nonce'u HKDF ile türetir; aText öğesini aes128gcm ile şifreler; PEM özel anahtarıyla imzalanmış bir VAPID JWT (ES256) oluşturur ve onu Authorization başlığı olarak ekler; DER genel anahtarını Crypto-Key başlığına yerleştirir; ve ikili şifreli metni abonelik uç noktasına POST eder. Eksik anahtarlar bir EsgcWebSocketException yükseltir; push hizmeti başarıda 201/202, abonelik süresi dolduğunda ve düşürülmesi gerektiğinde 404/410 veya kısıtlama uygulandığında 429 döndürür.

Örnek

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;

Yöntemlere Dön