Apple Push 알림
Delphi에서 HTTP/2를 통해 api.push.apple.com으로 APNs 푸시 알림을 전송하세요. 인증서 기반과 토큰 기반(JWT ES256) 인증을 모두 지원해요.
Delphi에서 HTTP/2를 통해 api.push.apple.com으로 APNs 푸시 알림을 전송하세요. 인증서 기반과 토큰 기반(JWT ES256) 인증을 모두 지원해요.
TsgcHTTP2Client(HTTP/2 전송)와 TsgcHTTP_JWT_Client(ES256 토큰 생성)를 결합하여 APNs를 사용해요 — 레거시 바이너리 프로토콜이 폐기된 이후 Apple이 권장하는 조합이에요.
TsgcHTTP2Client + TsgcHTTP_JWT_Client
Windows, macOS, Linux, iOS, Android
Standard / Professional / Enterprise
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을 지정하세요 — 동일한 컴포넌트, 호스트만 달라요.
Apple의 문서에 따라 apns-topic, apns-priority, apns-push-type, apns-collapse-id, apns-expiration에 대해 Request.CustomHeaders를 설정하세요.
단일 TLS 연결이 분당 수천 건의 푸시를 보내요 — HTTP/2 스트림이 요청을 멀티플렉싱해요. 호출별로 Response.Status를 확인하여 전달 결과를 확인해요.
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) 라이브러리의 모든 컴포넌트를 다루는 종합 설명서. | 열기 |