架构概览

SubHub 是 Apple App Store 与 Google Play 的统一购买后端,专注于购买验证、权益发放与事件推送。

设计原则

  • Provider-independent — 核心模型不含 Apple/Google 特定字段
  • Entitlement-first — 鉴权基于权益,而非 Product
  • Opaque identity — developerUserId 不做解析
  • Backend business logic — SDK 保持六个方法的极简面
  • Events + Webhooks — 开发者拥有分析与业务自动化

系统分层

架构图
┌─────────────────────────────────────────┐
│  Client App (iOS / Android)             │
│  SubHub SDK — 6 methods only            │
└──────────────┬──────────────────────────┘
               │ REST API
┌──────────────▼──────────────────────────┐
│  SubHub Platform (Core)                 │
│  Workspace → App → Product → Purchase   │
│  → Entitlement → Member → Events        │
└──────────────┬──────────────────────────┘
               │
┌──────────────▼──────────────────────────┐
│  Provider Adapters                      │
│  ┌─────────────┐  ┌─────────────┐      │
│  │ Apple       │  │ Google Play │      │
│  │ StoreKit 2  │  │ Billing Lib │      │
│  └─────────────┘  └─────────────┘      │
└─────────────────────────────────────────┘
               │
┌──────────────▼──────────────────────────┐
│  Developer Backend                      │
│  Webhooks · REST API · Custom Logic     │
└─────────────────────────────────────────┘

Commerce 数据流

核心数据流:Product → Purchase → Entitlement

开发者永远不应直接查询 Product 做鉴权。SDK 暴露 hasEntitlement(),服务端查询 Entitlement API。

Store SKU → Product (catalog)
         ↓ purchase + verify
       Purchase (transaction record)
         ↓ entitlement mapping
       Entitlement (access unit)
         ↓
       hasEntitlement("premium") → true/false

工作区(Workspace)

工作区是租户边界,包含多个 App、成员、购买与配置。每个工作区有唯一 slug(如 neo-studio),用于控制台 URL 与 REST API 路径。

控制台地址:`/w/{slug}/dashboard` · API 前缀:`/v1/workspaces/{slug}/`。鉴权仍通过 API Key,slug 便于人类识别与支持沟通。

明确不在范围内

  • 用户认证 / 登录注册
  • 推送通知
  • 文件存储
  • 内置数据分析
  • Remote Config
  • 通用 BaaS 能力