iOS SDK

Swift SDK 参考 — StoreKit 2 集成,支持 iOS 15+。

前置条件

  • iOS 15+(StoreKit 2)
  • Xcode 15+
  • 控制台中的 Publishable Key(pk_live_... 或 pk_test_...)

安装

通过 Swift Package Manager 添加依赖:

Package.swift
.package(url: "https://github.com/subhub/subhub-ios-sdk", from: "1.0.0")

// Target dependency
.product(name: "SubHub", package: "subhub-ios-sdk")

configure(publishableKey:)

初始化 SDK。必须在其他方法之前调用,通常在 App 入口或 AppDelegate 中执行。

使用控制台中的 Publishable Key,切勿在客户端使用 Secret Key。

Swift
import SubHub

// App 入口或 AppDelegate
SubHub.configure(publishableKey: "pk_live_focustimer_ios_8f3k2m")

identify(_:)

关联开发者提供的 opaque 用户标识。平台不解析此字符串 — 可为 UUID、email、Firebase UID 等。

未调用 identify 时,成员仅以 anonymousId 标识。登出时传 nil 解除关联。

try await SubHub.identify("firebase_uid_8a2b")

// 登出时解除关联
try await SubHub.identify(nil)

purchase(productId:)

发起 App Store 应用内购买。productId 为 App Store Connect 中的 Product ID(StoreKit Product.identifier),非 SubHub 内部 ID。

SDK 处理 StoreKit 2 交互,购买完成后自动将交易凭证提交至 SubHub 验证。

let result = try await SubHub.purchase(
    productId: "com.neo.focustimer.promo"
)
print(result.purchaseId)
print(result.entitlements)

restore()

恢复用户历史 App Store 购买。适用于换机或重装场景。

try await SubHub.restore()
let entitlements = try await SubHub.entitlements()

entitlements()

返回当前成员持有的所有 Entitlement 实例。

let entitlements = try await SubHub.entitlements()
for ent in entitlements {
    print("\(ent.identifier): \(ent.isActive)")
}

hasEntitlement(_:)

检查成员是否持有指定 Entitlement。这是客户端鉴权的推荐方式。

不要使用 hasProduct() — 业务逻辑应基于 Entitlement,而非 Product。

if try await SubHub.hasEntitlement("premium") {
    showPremiumContent()
}

错误处理

SDK 抛出 SubHubError 枚举,常见情况包括网络失败、用户取消购买、凭证验证失败等。

do {
    let result = try await SubHub.purchase(productId: "com.app.promo")
} catch SubHubError.userCancelled {
    // 用户取消
} catch SubHubError.verificationFailed {
    // 凭证验证失败
} catch {
    // 其他错误
}