Apple Push 알림

Delphi에서 HTTP/2를 통해 api.push.apple.com으로 APNs 푸시 알림을 전송하세요. 인증서 기반과 토큰 기반(JWT ES256) 인증을 모두 지원해요.

TsgcHTTP2Client + TsgcHTTP_JWT_Client

TsgcHTTP2Client(HTTP/2 전송)와 TsgcHTTP_JWT_Client(ES256 토큰 생성)를 결합하여 APNs를 사용해요 — 레거시 바이너리 프로토콜이 폐기된 이후 Apple이 권장하는 조합이에요.

컴포넌트 클래스

TsgcHTTP2Client + TsgcHTTP_JWT_Client

프로토콜

APNs HTTP/2

플랫폼

Windows, macOS, Linux, iOS, Android

에디션

Standard / Professional / Enterprise

JWT 서명, 알림 POST, HTTP/2 상태 확인

APNs ES256 개인 키와 키/팀 ID로 TsgcHTTP_JWT_Client를 설정하고 TsgcHTTP2Client.Authentication.Token.JWT에 연결한 다음, /3/device/<token>에 JSON 페이로드를 POST하세요.

uses
  sgcHTTP, sgcBase_Helpers;

var
  HTTP2: TsgcHTTP2Client;
  JWT: TsgcHTTP_JWT_Client;
begin
  JWT := TsgcHTTP_JWT_Client.Create(nil);
  JWT.JWTOptions.Header.alg := jwtES256;
  JWT.JWTOptions.Header.kid := 'APPLE-KEY-ID';
  JWT.JWTOptions.Payload.iss := 'APPLE-TEAM-ID';
  JWT.JWTOptions.Payload.iat := StrToInt64(GetDateTimeUnix(Now, False));
  JWT.JWTOptions.Algorithms.ES.PrivateKey.LoadFromFile('AuthKey_XXX.p8');
  JWT.JWTOptions.RefreshTokenAfter := 40 * 60;

  HTTP2 := TsgcHTTP2Client.Create(nil);
  HTTP2.TLSOptions.IOHandler := iohSChannel;
  HTTP2.Authentication.Token.JWT := JWT;
  HTTP2.Request.CustomHeaders.Clear;
  HTTP2.Request.CustomHeaders.Add('apns-topic: com.example.app');

  HTTP2.Post(
    'https://api.push.apple.com/3/device/',
    '{"aps":{"alert":"hello","sound":"default"}}');
end;
// uses: sgcHTTP
TsgcHTTP_JWT_Client *JWT = new TsgcHTTP_JWT_Client(this);
JWT->JWTOptions->Header->alg = jwtES256;
JWT->JWTOptions->Header->kid = "APPLE-KEY-ID";
JWT->JWTOptions->Payload->iss = "APPLE-TEAM-ID";
JWT->JWTOptions->Algorithms->ES->PrivateKey->LoadFromFile("AuthKey_XXX.p8");

TsgcHTTP2Client *HTTP2 = new TsgcHTTP2Client(this);
HTTP2->Authentication->Token->JWT = JWT;
HTTP2->Request->CustomHeaders->Add("apns-topic: com.example.app");
HTTP2->Post("https://api.push.apple.com/3/device/", payload);

내부 구성

두 개의 협력 컴포넌트가 APNs를 종단 간으로 처리해요 — HTTP/2 프레이밍과 JWT 생성.

토큰 기반 인증

Apple AuthKey_*.p8 개인 키로 서명된 ES256 JWT. JWT 클라이언트는 40분마다 자동으로 토큰을 갱신해요(Apple은 한 시간 내 갱신을 권장해요).

인증서 기반 인증

레거시 범용 인증서의 경우 TLSOptions.CertFile + Password를 설정하고 Authentication.Token.JWT를 비우세요. TLS 핸드셰이크가 연결을 인증해요.

프로덕션 / 샌드박스

프로덕션은 api.push.apple.com, 샌드박스는 api.development.push.apple.com으로 URL을 지정하세요 — 동일한 컴포넌트, 호스트만 달라요.

apns-topic + 헤더

Apple의 문서에 따라 apns-topic, apns-priority, apns-push-type, apns-collapse-id, apns-expiration에 대해 Request.CustomHeaders를 설정하세요.

HTTP/2 멀티플렉싱

단일 TLS 연결이 분당 수천 건의 푸시를 보내요 — HTTP/2 스트림이 요청을 멀티플렉싱해요. 호출별로 Response.Status를 확인하여 전달 결과를 확인해요.

SChannel 또는 OpenSSL

Windows에서 커널 모드 TLS를 사용하려면 iohSChannel(DLL 불필요)을, 크로스플랫폼 서버 배포에는 iohOpenSSL을 사용하세요.

사양 & 참고 자료

이 컴포넌트가 구현하는 API의 공식 출처.

문서 & 데모

컴포넌트 레퍼런스로 바로 이동하고, 바로 실행 가능한 데모 프로젝트를 가져오고, 체험판을 다운로드해요.

온라인 도움말 — TsgcHTTP2Client Full property, method and event reference for this component.
데모 프로젝트 — Demos\20.HTTP_Protocol\07.Apple_Push_Notifications 바로 실행 가능한 예제 프로젝트. sgcWebSockets 패키지에 포함되어 있어요 — 아래에서 체험판을 다운로드하세요.
기술 문서 (PDF) 이 컴포넌트만의 기능, 빠른 시작, Delphi & C++ Builder 코드 샘플과 1차 출처 참고 자료.
사용자 설명서 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 설명서.

Delphi에서 APNs 푸시를 보낼 준비가 되셨나요?

무료 체험판을 다운로드하고 Delphi 애플리케이션에 Apple Push 알림을 통합해 보세요.