Apple Push Notifications
Send APNs push notifications from Delphi over HTTP/2 to api.push.apple.com. Supports both certificate-based and token-based (JWT ES256) authentication.
Send APNs push notifications from Delphi over HTTP/2 to api.push.apple.com. Supports both certificate-based and token-based (JWT ES256) authentication.
Pair TsgcHTTP2Client (HTTP/2 transport) with TsgcHTTP_JWT_Client (ES256 token minting) to drive APNs — the combo Apple recommends since the legacy binary protocol was retired.
TsgcHTTP2Client + TsgcHTTP_JWT_Client
Windows, macOS, Linux, iOS, Android
Standard / Professional / Enterprise
Configure TsgcHTTP_JWT_Client with your APNs ES256 private key and key/team IDs, link it to TsgcHTTP2Client.Authentication.Token.JWT, then POST the JSON payload to /3/device/<token>.
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);
Two cooperating components handle APNs end-to-end — HTTP/2 framing and JWT minting.
ES256 JWTs signed with your Apple AuthKey_*.p8 private key. The JWT client refreshes the token automatically every 40 minutes (Apple expects rotation within an hour).
For legacy universal certificates, set TLSOptions.CertFile + Password and clear Authentication.Token.JWT. The TLS handshake authenticates the connection.
Point the URL at api.push.apple.com for production or api.development.push.apple.com for the sandbox — same component, just a different host.
Set Request.CustomHeaders for apns-topic, apns-priority, apns-push-type, apns-collapse-id, apns-expiration per Apple's documentation.
A single TLS connection sends thousands of pushes per minute — HTTP/2 streams multiplex the requests. Inspect Response.Status per call for delivery results.
Use iohSChannel on Windows for kernel-mode TLS (no DLLs needed) or iohOpenSSL for cross-platform server deployments.
Authoritative sources for the APIs this component implements.
Deep-link to the component reference, grab the ready-to-run demo project, and download the trial.
| Online Help — TsgcHTTP2Client Full property, method and event reference for this component. | Open | |
| Demo Project — Demos\20.HTTP_Protocol\07.Apple_Push_Notifications Ready-to-run example project. Ships inside the sgcWebSockets package — download the trial below. | Open | |
| Technical Document (PDF) Features, quick start, code samples for Delphi & C++ Builder and primary-source references — this component only. | Open | |
| User Manual (PDF) Comprehensive manual covering every component in the library. | Open |