Apple Push Notifications
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
TsgcHTTP_JWT_Client を APNs ES256 秘密鍵およびキー/チーム ID で構成し、TsgcHTTP2Client.Authentication.Token.JWT にリンクしたうえで、JSON ペイロードを /3/device/<token> に 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);
2 つの協調するコンポーネントが APNs をエンドツーエンドで処理します — HTTP/2 フレーミングと JWT 発行。
Apple の AuthKey_*.p8 秘密鍵で署名された ES256 JWT。JWT クライアントは 40 分ごとにトークンを自動的に更新します(Apple は 1 時間以内のローテーションを期待しています)。
レガシーのユニバーサル証明書を使用する場合は、TLSOptions.CertFile と Password を設定し、Authentication.Token.JWT をクリアします。TLS ハンドシェイクが接続を認証します。
本番環境では URL を api.push.apple.com に、サンドボックス環境では api.development.push.apple.com に指定します — 同じコンポーネントで、ホストが異なるだけです。
Apple のドキュメントに従い、Request.CustomHeaders で apns-topic、apns-priority、apns-push-type、apns-collapse-id、apns-expiration を設定します。
単一の TLS 接続で 1 分あたり数千件のプッシュを送信できます — HTTP/2 ストリームがリクエストを多重化します。配信結果は呼び出しごとに Response.Status を確認してください。
Windows ではカーネルモード TLS の iohSChannel(DLL 不要)を、クロスプラットフォームサーバー展開には iohOpenSSL をご使用ください。
本コンポーネントが実装する API の信頼できる情報源です。
コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、体験版のダウンロードをご利用いただけます。
| オンラインヘルプ — TsgcHTTP2Client このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンス。 | Open | |
| デモプロジェクト — Demos\20.HTTP_Protocol\07.Apple_Push_Notifications すぐに実行可能なサンプルプロジェクト。sgcWebSockets パッケージに同梱されています — 下記から体験版をダウンロードしてください。 | 開く | |
| 技術ドキュメント(PDF) 機能、クイックスタート、Delphi & C++ Builder のコードサンプル、一次情報源リファレンス — 本コンポーネントのみ対象。 | Open | |
| ユーザーマニュアル(PDF) ライブラリ内のすべてのコンポーネントを網羅した包括的なマニュアル。 | Open |