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,是未来应用内支付开发的推荐方案。