TsgcWebPush_Client메서드 › SendNotification

SendNotification 메서드

aes128gcm으로 페이로드를 암호화하고, 요청에 VAPID 서명을 하며, 브라우저 구독 엔드포인트에 POST합니다.

구문

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

Parameters

NameType설명
aPushSubscriptionconst TsgcHTTP_API_WebPush_PushSubscription등록 시 브라우저가 반환한 구독 레코드입니다. per-message 콘텐츠 암호화 키를 도출하는 데 사용되는 Endpoint(POST할 푸시 서비스 URL), PublicKey(user-agent P-256 공개 키, p256dh, Base64URL 인코딩) 및 AuthSecret(16바이트 auth secret, Base64URL 인코딩)을 전달합니다.
aTextconst string브라우저에 전달할 평문 페이로드입니다(일반적으로 Service Worker가 해석하는 JSON 문서). 값은 UTF-8로 인코딩되고 전송되기 전에 aes128gcm으로 암호화됩니다. 빈 문자열은 페이로드 없는 알림을 보냅니다.

설명

단일 호출 Web Push 전송(RFC 8030 + RFC 8291)입니다. 이 메서드는 VAPID 키가 구성되어 있고 aPushSubscription에 Endpoint, PublicKey 및 AuthSecret이 포함되어 있는지 검증합니다. 사용자 에이전트 공개 키에 대해 ECDH 공유 비밀을 계산하고, HKDF로 콘텐츠 암호화 키와 nonce를 도출하고, 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;

메서드로 돌아가기