StoreKit 2 是 Apple 在 iOS 15 / macOS 12 及更高版本中引入的全新框架,相较于旧版 StoreKit,它提供了更现代化、简洁且功能更强大的 API,极大地简化了应用内支付(IAP)和订阅的实现流程。
以下是 StoreKit 2 的关键功能:
1. 基于 Swift 的现代化 API
StoreKit 2 使用 async/await 异步编程模型,简化了代码结构,提高了可读性,避免了繁杂的回调处理。
例如,获取商品列表、发起购买都可以通过简洁的 async 方法实现。
示例:获取商品信息
let productIds = ["com.app.product1", "com.app.subscription1"]
do {
    let products = try await Product.products(for: productIds)
    for product in products {
        print("商品名称: \(product.displayName), 价格: \(product.price)")
    }
} catch {
    print("获取商品失败: \(error)")
}
2. 统一的 Product 和 Transaction 类型
StoreKit 2 引入了更清晰的数据模型,统一管理 商品 和 交易。
Product:表示所有类型的可购买商品(如一次性购买和订阅)。Transaction:表示支付结果和交易数据,包含验证信息。
示例:触发购买
Task {
    let result = try await product.purchase()
    switch result {
    case .success(let verification):
        if case .verified(let transaction) = verification {
            print("购买成功: \(transaction.productID)")
            await transaction.finish()
        }
    case .userCancelled:
        print("用户取消购买")
    default:
        print("购买失败或待处理")
    }
}
3. Transaction 事务处理和验证
StoreKit 2 提供了更强大的 事务验证机制 和 事务监听功能,帮助你确保支付的安全性和正确性。
- 异步监听未完成的交易:
使用Transaction.updates监听支付状态,包括未完成的交易(如崩溃或断网导致)。 
示例:监听交易更新
for await verification in Transaction.updates {
    if case .verified(let transaction) = verification {
        print("监听到新交易: \(transaction.productID)")
        await transaction.finish()
    }
}
- 收据验证:
Transaction本身支持验证,开发者可以本地验证交易,也可以通过 Apple 服务器验证。 
4. 订阅管理和当前权益查询
StoreKit 2 提供了方便的接口,帮助你获取当前用户的订阅状态和有效权益。
Transaction.currentEntitlements:返回用户当前的有效购买信息(包括订阅状态)。
示例:查询有效订阅
for await verification in Transaction.currentEntitlements {
    if case .verified(let transaction) = verification {
        print("有效订阅: \(transaction.productID)")
    }
}
Transaction.renewalInfo:可以获取订阅续订信息,包括下一个续费日期、订阅是否会自动续订等。
5. 支持 App Store Server API 与通知
StoreKit 2 支持与 App Store Server API 集成,用于处理订阅状态、退款、过期提醒等操作,确保订阅管理更加可靠。
- 开发者可以监听 App Store Server Notifications 来获取订阅状态的实时更新(例如订阅续订、取消、退款等)。
 
6. 测试和调试工具增强
Apple 为 StoreKit 2 提供了更好的开发者工具,支持在 Xcode 中使用 StoreKit 测试环境进行调试。
- StoreKit 配置文件:允许开发者在本地模拟应用内购买商品和订阅,便于测试支付流程。
 - Xcode StoreKit 测试框架:无需实际提交 App,即可测试购买逻辑。
 
7. 错误处理和用户友好提示
StoreKit 2 提供了更清晰的错误处理,允许你根据错误类型提供更合适的用户提示。
示例:处理购买错误
do {
    let result = try await product.purchase()
} catch StoreKitError.userCancelled {
    print("用户取消了支付")
} catch {
    print("购买失败: \(error.localizedDescription)")
}
8. 简化的退订和退款流程
用户可以在 App 内直接通过 Manage Subscriptions 接口跳转到 App Store 管理订阅页面,提供更友好的退款和管理体验。
示例:打开订阅管理页面
try? await AppStore.showManageSubscriptions()
总结
StoreKit 2 带来的关键功能包括:
- 现代化的 
async/await异步 API,简化开发流程。 - 统一的 
Product和Transaction类型,适用于所有商品。 - 支持事务验证和监听,保证支付安全。
 - 提供订阅管理和当前权益查询,简化订阅逻辑。
 - 强大的测试工具和 App Store Server 集成,方便调试和管理。
 
StoreKit 2 提供了功能更强大且更易用的 API,是未来应用内支付开发的推荐方案。