StoreKit — purchase
This article is extracted from the chat log with AI. Please identify it with caution.

StoreKit 中 Product 的 purchase 方法介绍 #

在 Swift 的 StoreKit 框架中,Product 类型的 purchase() 方法是用于发起应用内购买(In-App Purchase)的核心方法。以下是关于这个方法的详细介绍:

基本用法 #

purchase() 方法是 Product 结构体的实例方法,用于启动购买流程:

let result = try await product.purchase()

返回值 #

purchase() 方法返回一个 Product.PurchaseResult 枚举值,可能是以下情况之一:

  1. .success(VerificationResult<Transaction>) - 购买成功,包含交易信息
  2. .pending - 购买需要家长/监护人批准(针对儿童账户)
  3. .userCancelled - 用户取消了购买
  4. .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
    }
}

注意事项 #

  1. 异步方法purchase() 是一个异步方法,需要使用 await 调用
  2. 主线程要求:在 iOS 上,必须在主线程调用此方法
  3. 沙盒测试:在开发阶段使用沙盒环境测试购买流程
  4. 交易完成:成功购买后,必须调用 Transaction.finish() 来完成交易
  5. 错误处理:需要妥善处理可能抛出的错误

最佳实践 #

  1. 在调用 purchase() 前检查 AppStore.canMakePayments 确认用户可以进行支付
  2. 提供清晰的用户界面指示购买状态
  3. 正确处理家长批准流程
  4. 实现持久化的交易监听器以处理中断的购买

StoreKit 2 的 purchase() 方法相比旧版 StoreKit 提供了更简洁的 API,并充分利用了 Swift 的现代并发特性。

本文共 529 字,创建于 May 6, 2025
相关标签: Xcode, ByAI, StoreKit