Apple Push 通知

通过 HTTP/2 从 Delphi 向 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 私钥和 Key/Team ID 配置 TsgcHTTP_JWT_Client,将其链接到 TsgcHTTP2Client.Authentication.Token.JWT,然后向 /3/device/<token> POST JSON 载荷。

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 握手对连接进行身份验证。

生产 / 沙盒

将 URL 指向 api.push.apple.com(生产)或 api.development.push.apple.com(沙盒)— 相同组件,只需更改主机。

apns-topic + 请求头

按 Apple 文档设置 Request.CustomHeaders,包括 apns-topicapns-priorityapns-push-typeapns-collapse-idapns-expiration

HTTP/2 多路复用

单条 TLS 连接每分钟可发送数千条推送 — HTTP/2 流对请求进行多路复用。每次调用后检查 Response.Status 获取传递结果。

SChannel 或 OpenSSL

在 Windows 上使用 iohSChannel 进行内核模式 TLS(无需 DLL),或使用 iohOpenSSL 用于跨平台服务器部署。

规范与参考

本组件所实现 API 的权威来源。

文档与演示

直达组件参考,获取可立即运行的演示项目,并下载试用版。

在线帮助 — TsgcHTTP2Client 本组件的完整属性、方法和事件参考。
演示项目 — Demos\20.HTTP_Protocol\07.Apple_Push_Notifications 可立即运行的示例项目,随 sgcWebSockets 包一起提供 — 请从下方下载试用版。
技术文档 (PDF) 仅涵盖本组件的功能、快速入门、Delphi 和 C++ Builder 代码示例及主要参考来源。
用户手册 (PDF) 涵盖库中每个组件的综合手册。

准备好从 Delphi 发送 APNs 推送了吗?

下载免费试用版,将 Apple 推送通知集成到您的 Delphi 应用程序中。