← Web SDK 完整 API 文档

多端接入指南

CommonSrv 服务端、用户、积分、订阅和业务 API 只有一套;各平台只替换登录容器、安全存储和商店购买。 现有 Web 应用不需要迁移。请先选平台,不要把 Web iframe、localStorage 或 Web 数字商品支付复制到原生 App。

购买链路结论:iOS/Android 的订阅项与积分包不使用 WebView。 CommonSrv catalog 只下发允许售卖的 Product ID;商品名称、当地价格、币种、周期和购买确认 必须来自 StoreKit 2 / Google Play Billing。商店扣款后,CommonSrv 服务端复核交易并发放 订阅或积分。只有 Web 端继续使用现有 Web 支付页。
平台登录Session订阅与积分购买
WebBrowser SDK 托管登录SDK localStorageCommonSrv Web 支付页
iOS原生 Apple/Google/Facebook;邮箱/手机走系统认证会话KeychainStoreKit 2 原生商品与购买
AndroidCredential Manager Google;邮箱/手机走 Custom TabsKeystoreGoogle Play Billing
macOS原生 Apple 或系统认证会话Keychain按分发渠道:StoreKit 或 Web
Windows系统浏览器 OAuth + 回调Credential Locker按分发渠道:Microsoft Store 或 Web

Web

推荐:已有 Web 项目继续使用现有 Browser SDK,零迁移。

<script src="https://<your-commonsrv-host>/sdk/commonsrv-browser.js"></script>
<script>
  CommonSrv.configure({ clientId: "cli_xxx" });
  login.onclick   = () => CommonSrv.auth.openLogin();
  billing.onclick = () => CommonSrv.billing.open();
</script>
  • • React、Vue、Angular、Svelte和传统 HTML 共用同一个 SDK。
  • • 现有 client_id、用户、积分、订阅、localStorage key 和 API 保持不变。
  • • 完整 Web 能力继续查看 /docs;服务端与其它语言查看 /docs-rest。

iOS / App Store

推荐:Apple、Google、Facebook 使用原生 Provider;邮箱、手机、注册和找回密码使用 ASWebAuthenticationSession 承载托管认证页。

const commonsrv = createReactNativeCommonSrv({
  clientId: "cli_xxx",
  baseUrl: "https://<your-commonsrv-host>",
  platform: "ios",
  bundleId: "com.example.app",
  secureStorage: keychainStorage,
  providers: { apple: appleProvider, google: googleProvider, facebook: facebookProvider },
  purchases: storeKit2Provider,
});

await commonsrv.auth.signIn("apple");
const { products } = await commonsrv.store.catalog();
await commonsrv.store.purchase(products[0].productId);
  • • Sign in with Apple 使用 AuthenticationServices,并把 identityToken + nonce 交给 CommonSrv。
  • • Google 使用官方 iOS Provider;不要在普通 WKWebView 中完成 OAuth。
  • • 商品名称、价格、周期与可售状态来自 StoreKit;禁止 WebView 商品页和 Web 数字商品支付。
  • • 支持账号创建时,宿主 App 必须提供账号删除入口。

Android / Google Play

推荐:Google 使用 Credential Manager;邮箱与手机登录通过 Custom Tabs打开 CommonSrv 托管认证页。

const commonsrv = createReactNativeCommonSrv({
  clientId: "cli_xxx",
  baseUrl: "https://<your-commonsrv-host>",
  platform: "android",
  bundleId: "com.example.app",
  secureStorage: keystoreStorage,
  providers: { google: googleProvider, facebook: facebookProvider },
  purchases: playBillingProvider,
});

await commonsrv.auth.signIn("google");
const { products } = await commonsrv.store.catalog();
await commonsrv.store.purchase(products[0].productId);
  • • Google ID token 必须由 CommonSrv 服务端校验,客户端不能自行信任 claims。
  • • 购买结果上传 purchase token;CommonSrv 使用 Android Publisher API 复核后入账。
  • • 处理 pending purchase、恢复购买和退款;价格只使用 Play Billing 返回值。
  • • refresh token 使用 Keystore 保护的存储,不写明文 AsyncStorage。

macOS

推荐:业务 Core 与移动端共用;登录和购买由实际分发渠道决定。

const commonsrv = createDesktopCommonSrv({
  clientId: "cli_xxx", baseUrl: "https://<your-commonsrv-host>", platform: "macos",
  bundleId: "com.example.mac",
  secureStorage: createKeytarSessionStorage(keytar, "com.example.mac"),
  authSession, store: storeKitProvider,
});

await commonsrv.auth.signInHosted({ redirectUri: "example-mac://auth/callback" });
const { products } = await commonsrv.store.catalog();
  • • Mac App Store:Apple 登录优先 AuthenticationServices;数字商品使用 StoreKit。
  • • 官网分发:系统浏览器认证;符合业务与地区规则时可继续 Web 支付。
  • • Session 保存到 Keychain。Tauri/Electron 只做薄壳,不复制认证与积分逻辑。

Windows

推荐:使用 SDK Core 或 REST;登录通过系统浏览器 OAuth 回调,不维护第二套 CommonSrv。

const commonsrv = createDesktopCommonSrv({
  clientId: "cli_xxx", baseUrl: "https://<your-commonsrv-host>", platform: "windows",
  bundleId: "9EXAMPLEAPP",
  secureStorage: createKeytarSessionStorage(keytar, "ExampleApp"),
  authSession, store: microsoftStoreProvider,
});

const ticket = await commonsrv.store.windowsCollectionsTicket();
// 把 ticket.service_ticket + ticket.publisher_user_id 交给 Windows native bridge
  • • Session 保存到 Windows Credential Locker/DPAPI,禁止明文文件。
  • • Microsoft Store 使用 Windows.Services.Store + User Collections ID;CommonSrv 服务端通过 Entra 和 Collections API 验权。官网分发可使用系统浏览器 Web 支付。
  • • 桌面 UI 可以是 React/Tauri/Electron,但 token 刷新和 CommonSrv API 仍只来自 SDK Core。

CommonSrv 后台配置

推荐:每个原生 App 配置一次;密钥只放部署环境变量,数据库只保存环境变量名。

  • • 登记 CommonSrv project/client_id、platform、Bundle ID 或 Package Name。
  • • 登记 Apple/Google OAuth Client ID,以及可选 Facebook App ID。
  • • 将 Store Product ID 映射到 CommonSrv 套餐或积分包。
  • • 配置 Apple App Store Server API、Google Play 服务账号或 Microsoft Entra 环境变量。
  • • 先在独立测试项目使用 Apple Sandbox、Google License Tester 或 Microsoft Store Sandbox,随后再启用正式商品。

React Native 的完整可执行规范随 SDK 包提供:AI-INTEGRATION.md;平台核对与 测试分别见 INTEGRATION.md 和 TESTING.md。规范包含准确请求字段、 adapter 契约、商品 UI 数据源、购买/恢复顺序、错误表和 AI 验收清单。