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 {
// 其他错误
}