Apple App Store
配置 Apple Provider Adapter,连接 App Store Server API 与 StoreKit 2 交易验证。
概述
SubHub Phase 1 支持 Apple App Store。Provider Adapter 负责验证 StoreKit 2 signed transaction 并将结果归一化为通用 Purchase + Entitlement。
Apple 特定字段(如 originalTransactionId)仅存在于 Adapter 层,不会出现在核心 API 响应中。
前置条件
- App Store Connect 账号
- App Store Connect API 密钥(.p8 文件)
- App 内购买项目已在 App Store Connect 配置
- StoreKit 2 支持(iOS 15+)
控制台配置
在应用详情 → Apple 配置中填写:
| 字段 | 说明 |
|---|---|
| Issuer ID | App Store Connect → 用户与访问 → 密钥 → Issuer ID |
| Key ID | API 密钥的 Key ID |
| Team ID | Apple Developer Team ID |
| Shared Secret | (可选)旧版 receipt 验证用 |
StoreKit 2 集成
SubHub SDK 自动处理
// SDK 内部流程:
// 1. Product.products(for: [sku]) 获取商品
// 2. product.purchase() 发起交易
// 3. 提取 Transaction.signedPayload
// 4. POST /v1/purchases/verify 提交至 SubHub
// 5. 返回 Entitlement 结果
// 开发者只需调用:
let result = try await SubHub.purchase(
productId: "com.neo.focustimer.promo"
)App Store Server Notifications V2
SubHub 可接收 Apple Server Notifications 以处理续订、退款与订阅状态变更。
每个应用有独立的通知接收地址:`https://hooks.subhub.dev/v1/providers/apple/apps/{app_id}`。在 App Store Connect → App → App 信息 → App Store Server Notifications 中填入该 URL(将 `{app_id}` 替换为 SubHub 应用 ID,如 app_01KFOCUSIOS)。
同一工作区下有多个 iOS 应用时,每个应用需分别配置各自的地址 — 平台通过 app_id 路由到对应应用,不会混淆。
你无需直接处理 Apple 原始通知 — Provider Adapter 归一化后写入 Purchase 并触发 Webhook。
Sandbox 测试
- 使用 Sandbox Apple ID 在 TestFlight 或 Xcode 调试
- 控制台中区分 live / test 环境密钥
- Sandbox 交易会写入 test 环境数据