ウォレット (Apple および Google)
ブランドのメンバーシップ カードを Apple Wallet または Google Wallet に直接発行します。サーバー側で署名され、アプリは必要ありません。 Apple カードは、メンバーのポイントやティアが変更されると自動的に更新されます。
両方のプラットフォームの発行と完全な Apple PassKit アップデート Web サービスは、現在コードで公開されています。 SocialHub チームで構成されたウォレット認証情報 (Apple パス タイプ ID + 署名証明書、Google 発行者 + サービス アカウント) が必要です。
得られるもの
サーバーサイド発行ライブ
署名された .pkpass はサーバー側で生成され、メンバーにストリーミングされます。アプリにネイティブのパス署名コードはなく、カードのデザインを変更するアプリのリリースもありません。
カードの自動更新ライブ
ポイントまたはティアの変更 → サイレント APN アップデートがプッシュされる → デバイスがパスを再取得します。メンバーシップ カードはアプリ コードなしで有効な状態を維持します。
クリーンなライフサイクルライブ
削除されたメンバーのパス シリアルは 410 Gone を返すため、Wallet は古いカードを正常に削除します。 cron は署名証明書の有効期限を監視します。
Apple + Googleライブ
現在、両方のプラットフォームが 1 つのエンドポイントから発行します。Apple は署名された .pkpass を返します。 Google は保存リンクを返します。 (サイレント自動更新は Apple PassKit、Google カードは開くと更新されます。)
カードを発行する ライブ
サインインしているメンバー WebView 内からこれを呼び出します。セッション フローについては、メンバー ポータルの埋め込み ガイドを参照してください。
// The signed-in member's app requests their card. teamId + memberId come from the
// consumer SESSION (never the body) — the body only selects the platform.
POST https://flash.socialhub.ai/api/consumer/wallet/issue
Content-Type: application/json
{ "platform": "apple" } // "apple" | "google"
// Apple → 200 Content-Type: application/vnd.apple.pkpass
// Content-Disposition: attachment; filename="loyalty-<serial>.pkpass"
// (the response body IS the signed .pkpass — hand it to "Add to Apple Wallet")
// Google → 200 { "saveUrl": "https://pay.google.com/gp/v/save/…" }
// (redirect the member to saveUrl → "Save to Google Wallet")
//
// Wallet not configured for that platform → DomainError WALLET_NOT_CONFIGURED.アップデートは自動的に行われます ライブ
// You do NOT write update code. SocialHub hosts the standard Apple PassKit update
// web service, so the card stays current on its own:
//
// 1. The pass registers the device when added to Wallet
// POST /api/wallet/apple/v1/devices/{deviceId}/registrations/{passTypeId}/{serial}
// 2. A points / tier change enqueues a silent APNs push to the device
// 3. The device re-fetches the latest pass
// GET /api/wallet/apple/v1/passes/{passTypeId}/{serial}
//
// These endpoints are called by Apple's device, not by your app — listed here for
// transparency. A removed / unenrolled member's serial returns 410 Gone (not 500),
// so Wallet cleanly drops a stale card.ライブに行く前に
Apple パス タイプ ID
Apple 開発者アカウントにパス タイプ ID を登録し ([識別子] → [パス タイプ ID])、SocialHub チームと共有します。
パス署名証明書
そのパス タイプ ID のパス署名証明書を生成します。各 .pkpass はサーバー側で署名されます。 cron は期限切れを監視するので、何も言わずに期限切れになることはありません。
APN 認証キー (.p8)
SocialHub が Apple カードを最新の状態に保つサイレント アップデート通知をプッシュできるように、APN 認証キー (キー ID + チーム ID) を提供します。
Google Wallet 発行者
Google カードの場合は、Google Wallet 発行者 ID とサービス アカウント キーを入力します。 SocialHub は署名済みの保存リンクをサーバー側で作成します。
注: パス タイプ ID とパス署名証明書を作成するには、有料の Apple 開発者プログラムの Apple 開発者アカウントが必要です。
受け入れチェックリスト
POST /wallet/issue (プラットフォーム: apple) から発行された実際の .pkpass はデバイスにインストールされ、メンバーの現在のポイント/ティアが表示されます。
リクエスト元のプラットフォーム: Google は、カードを Google Wallet に追加する saveUrl を返します。
メンバーのポイントを変更すると、インストールされている Apple カードが数秒以内に更新されます。アプリの操作は必要ありません。
認証情報が構成されていないプラットフォームに対して発行すると、破損したファイルではなく、WALLET_NOT_CONFIGURED が返されます。
削除されたメンバーのAppleパスシリアルは410 Goneを返し、Walletはカードを破棄します。500エラーは発生しません。
ウォレット カードを設定しますか?
Apple パス タイプ ID、署名証明書、APN キー、または Google Wallet 発行者の設定については、エンジニアにご相談ください。
エンジニアリングに相談する