지갑 (Apple & Google)
브랜드 멤버십 카드를 Apple Wallet 또는 Google Wallet에 바로 발급하세요. 서버 측에서 서명되므로 앱이 필요하지 않습니다. Apple 카드는 회원의 포인트 또는 등급이 변경되는 즉시 자동으로 업데이트됩니다.
두 플랫폼 모두 발급 및 전체 Apple PassKit 업데이트 웹 서비스가 오늘 코드에서 활성화되었습니다. SocialHub 팀에 구성된 지갑 자격 증명(Apple Pass 유형 ID + 서명 인증서, Google 발급자 + 서비스 계정)이 필요합니다.
제공되는 혜택
서버측 발행살다
서명된 .pkpass는 서버 측에서 생성되어 회원에게 스트리밍됩니다. 앱에 기본 패스 서명 코드가 없고 카드 디자인을 변경하는 앱 릴리스도 없습니다.
자동 카드 업데이트살다
포인트 또는 등급 변경 → APNs 업데이트가 자동으로 푸시됨 → 기기가 패스를 다시 가져옴. 멤버십 카드는 앱 코드 없이 계속 사용 가능.
클린 라이프사이클살다
삭제된 회원의 패스 시리얼 번호가 410 Gone 오류를 반환하면 Wallet은 만료된 카드를 안전하게 삭제합니다. cron 작업은 서명 인증서의 만료일을 감시합니다.
Apple + Google살다
현재 두 플랫폼 모두 하나의 엔드포인트에서 발급됩니다. Apple은 서명된 .pkpass 파일을 반환하고, Google은 저장 링크를 반환합니다. (자동 업데이트는 Apple PassKit에서, Google 카드는 열 때 갱신됩니다.)
카드를 발급하세요 살다
로그인한 회원의 웹뷰에서 이 기능을 호출하세요. 세션 흐름은 회원 포털 임베드 가이드를 참조하세요.
// 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는 서버측에서 서명됩니다. 크론은 만료를 감시하므로 자동으로 종료되지 않습니다.
APNs 인증 키(.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 오류는 발생하지 않습니다.