TsgcWebPush_Client › メソッド › SendNotification
aes128gcm でペイロードを暗号化し、VAPID で署名したリクエストをブラウザーのサブスクリプションエンドポイントに POST します。
procedure SendNotification(const aPushSubscription : TsgcHTTP_API_WebPush_PushSubscription; const aText: string);
| 名前 | タイプ | 説明 |
|---|---|---|
aPushSubscription | const TsgcHTTP_API_WebPush_PushSubscription | ブラウザが登録時に返すサブスクリプション レコード。Endpoint(POST 先のプッシュ サービス URL)、PublicKey(ユーザー エージェントの P-256 公開鍵、p256dh、Base64URL エンコード)、AuthSecret(16 バイトの auth シークレット、Base64URL エンコード)を持ちます。これらはメッセージごとのコンテンツ暗号化キーの導出に使用されます。 |
aText | const string | ブラウザーに配信するクリアテキストペイロード(通常、Service Worker が解釈する JSON ドキュメント)。値は UTF-8 エンコードされ、送信前に aes128gcm で暗号化されます。空の文字列を渡すとペイロードなしの通知が送信されます。 |
単一呼び出しの Web Push 送信(RFC 8030 + RFC 8291)。このメソッドは VAPID キーが設定されていること、aPushSubscription にエンドポイント、PublicKey、AuthSecret が含まれていることを検証し、ユーザーエージェントの公開鍵に対して ECDH 共有シークレットを計算し、HKDF でコンテンツ暗号化キーとノンスを導出し、aes128gcm で aText を暗号化し、PEM 秘密鍵で署名した VAPID JWT(ES256)を構築して Authorization ヘッダーに追加し、DER 公開鍵を Crypto-Key ヘッダーに配置し、バイナリの暗号文をサブスクリプションエンドポイントに POST します。キーが見つからない場合は EsgcWebSocketException が発生します。プッシュサービスは成功時に 201/202、サブスクリプションが期限切れで削除が必要な場合に 404/410、スロットリングが適用される場合に 429 を返します。
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;