TsgcWebPush_Client › Yöntemler › SendNotification
Yükü aes128gcm ile şifreler, isteği VAPID ile imzalar ve tarayıcı abonelik uç noktasına POST'lar.
procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);
| Name | Type | Açıklama |
|---|---|---|
aPushSubscription | const TsgcHTTP_API_WebPush_PushSubscription | Kayı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. |
aText | const string | Tarayı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. |
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.
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;