Apple Push Notifications

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 ステータスを確認

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.CertFilePassword を設定し、Authentication.Token.JWT をクリアします。TLS ハンドシェイクが接続を認証します。

本番/サンドボックス

本番環境では URL を api.push.apple.com に、サンドボックス環境では api.development.push.apple.com に指定します — 同じコンポーネントで、ホストが異なるだけです。

apns-topic + ヘッダー

Apple のドキュメントに従い、Request.CustomHeadersapns-topicapns-priorityapns-push-typeapns-collapse-idapns-expiration を設定します。

HTTP/2 多重化

単一の TLS 接続で 1 分あたり数千件のプッシュを送信できます — HTTP/2 ストリームがリクエストを多重化します。配信結果は呼び出しごとに Response.Status を確認してください。

SChannel または OpenSSL

Windows ではカーネルモード TLS の iohSChannel(DLL 不要)を、クロスプラットフォームサーバー展開には iohOpenSSL をご使用ください。

仕様 & リファレンス

本コンポーネントが実装する API の信頼できる情報源です。

ドキュメント & デモ

コンポーネントリファレンスへのディープリンク、すぐに実行可能なデモプロジェクト、体験版のダウンロードをご利用いただけます。

オンラインヘルプ — TsgcHTTP2Client このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンス。
デモプロジェクト — Demos\20.HTTP_Protocol\07.Apple_Push_Notifications すぐに実行可能なサンプルプロジェクト。sgcWebSockets パッケージに同梱されています — 下記から体験版をダウンロードしてください。
技術ドキュメント(PDF) 機能、クイックスタート、Delphi & C++ Builder のコードサンプル、一次情報源リファレンス — 本コンポーネントのみ対象。
ユーザーマニュアル(PDF) ライブラリ内のすべてのコンポーネントを網羅した包括的なマニュアル。

Delphi から APNs プッシュを送信しますか?

体験版をダウンロードして、Apple Push Notifications を Delphi アプリケーションに統合してください。