StoreKit 中 Product 的 purchase 方法介绍 #
在 Swift 的 StoreKit 框架中,Product
类型的 purchase()
方法是用于发起应用内购买(In-App Purchase)的核心方法。以下是关于这个方法的详细介绍:
基本用法 #
purchase()
方法是 Product
结构体的实例方法,用于启动购买流程:
let result = try await product.purchase()
返回值 #
purchase()
方法返回一个 Product.PurchaseResult
枚举值,可能是以下情况之一:
.success(VerificationResult<Transaction>)
- 购买成功,包含交易信息.pending
- 购买需要家长/监护人批准(针对儿童账户).userCancelled
- 用户取消了购买.pending
- 购买正在等待处理(如需要家长批准)
使用示例 #
func purchase(_ product: Product) async throws -> Transaction? {
let result = try await product.purchase()
switch result {
case .success(let verification):
// 验证交易
switch verification {
case .verified(let transaction):
// 交易验证通过,可以解锁内容
await transaction.finish()
return transaction
case .unverified(let transaction, let error):
// 交易验证失败,不应解锁内容
throw error
}
case .pending:
// 购买需要家长批准
throw PurchaseError.pendingParentalApproval
case .userCancelled:
// 用户取消购买
throw PurchaseError.userCancelled
@unknown default:
throw PurchaseError.unknown
}
}
注意事项 #
- 异步方法:
purchase()
是一个异步方法,需要使用await
调用 - 主线程要求:在 iOS 上,必须在主线程调用此方法
- 沙盒测试:在开发阶段使用沙盒环境测试购买流程
- 交易完成:成功购买后,必须调用
Transaction.finish()
来完成交易 - 错误处理:需要妥善处理可能抛出的错误
最佳实践 #
- 在调用
purchase()
前检查AppStore.canMakePayments
确认用户可以进行支付 - 提供清晰的用户界面指示购买状态
- 正确处理家长批准流程
- 实现持久化的交易监听器以处理中断的购买
StoreKit 2 的 purchase()
方法相比旧版 StoreKit 提供了更简洁的 API,并充分利用了 Swift 的现代并发特性。