跳到正文
Indiana
控制台
文档
章节目录 / iOS / Swift 接入

iOS / Swift 接入

安装原生 SDK、读取客户数据并验证 Sandbox 商店交付。

SDK 0.0.1更新于

1. 安装原生 SDK

在 Xcode 添加经审核的 GrooveGrow Swift Package(仓库 packages/ios),并链接 GrooveGrow 库。当前源码包要求 Swift 6,支持 iOS 15 及以上。

目前这些是仓库源码包,尚未证明公开 SPM 或 Maven 发行可用。安装完成后先验证身份与 readHoldings,再接入 Funnel 与商店购买。

2. 签发当前客户会话

  • 自己的后端先验证应用登录,再使用绑定当前 App / Sandbox 的 Server Key 识别客户并签发短期 customerToken。不要接受客户端任意指定的客户身份。
  • SDK 使用 HTTPS API 地址、App UUID 与 Sandbox 范围。环境 UUID 由服务端绑定核对;不要将 Console 会话、Server Key 或 Supabase 密钥放入 App。
  • Token 只保存在 SDK 内存。续期向自己的已认证后端请求;401 / 403 后清理当前客户数据并重新认证。

相关:身份与凭据边界

3. 连接并读取客户数据

GrowSession.swift
import Foundationimport GrooveGrow func connectGrow(baseURL: URL, projectID: UUID,                 customerToken: String, runToken: String) async throws -> (GrooveGrowClient, GrowFunnelSession) {    let client = GrooveGrowClient(configuration: try GrowConfiguration(        baseURL: baseURL,        scope: GrowScope(projectId: projectID, environment: .sandbox)))    try await client.identify(customerToken: customerToken)    _ = try await client.readHoldings()    let flow = try await client.funnel(runToken: runToken)    return (client, flow)} // Present GrowFunnelViewController(session: flow) on your MainActor UI.// Set onAuthenticate to obtain the current user's token from your backend.// Recover: try await client.recoverNativeOrders(using: verifiedHostRelay)// Explicit store sync: recoverNativeOrders(using: verifiedHostRelay, synchronizeStore: true)// On sign-out: await client.reset(); dismiss the old Funnel view.

连接成功的条件

readHoldings 中的会员与余额全部属于当前客户时才显示已连接。保留小数积分,不按整数取整。用户换号或离开页面时取消宿主任务,拒绝旧会话的迟到响应并整体清理旧快照。

4. 绑定并验证 Sandbox 商店购买

  • 在控制台「支付连接」选择当前 App / Sandbox 的 Apple 或 Google 连接,完成凭据验证及商品绑定。商店商品标识、应用标识和当前连接必须一致。
  • 将当前 runToken 交给 client.funnel,并展示 GrowFunnelViewController。native_purchase 指令由 StoreKit 查询真实商品、条款并购买;前台恢复调用 recoverNativeOrders,主动恢复另外设置 synchronizeStore: true。
  • 商店弹窗关闭或客户端回调不是交付证明。等待服务端验证与交付;重试保留当前 orderId、receiptId 与原命令,不再次发起购买。恢复 relay 由宿主真实登录后端添加 Server Key,以当前 customerToken 双鉴权;不能把 Key 放进设备。Google acknowledge / consume 由服务端负责。

5. 验收与故障恢复

原生验收条件
场景预期结果
首次接入持有读取和控制台客户详情一致;非法、过期和跨范围会话被拒绝。
退出与换号立即清理旧客户数据;旧请求不能覆盖新客户;重启后需重新认证。
断网与超时保留可重试错误,不显示成功;恢复网络后能重试原请求。
购买、恢复与退款真实 Sandbox 交易交付一次;恢复不重复授予;经验证退款与撤销反映在权益和账本。

原生验收条件

  • 首次接入

    预期结果
    持有读取和控制台客户详情一致;非法、过期和跨范围会话被拒绝。
  • 退出与换号

    预期结果
    立即清理旧客户数据;旧请求不能覆盖新客户;重启后需重新认证。
  • 断网与超时

    预期结果
    保留可重试错误,不显示成功;恢复网络后能重试原请求。
  • 购买、恢复与退款

    预期结果
    真实 Sandbox 交易交付一次;恢复不重复授予;经验证退款与撤销反映在权益和账本。
需要独立记录真实设备 / 模拟器、测试 App、商店账号、交易和服务端回执。HTTP fixture、编译通过、平台选择或检查表不能认证真实商店链路。