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. 统一的 ProductTransaction 类型

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 带来的关键功能包括:

  1. 现代化的 async/await 异步 API,简化开发流程。
  2. 统一的 ProductTransaction 类型,适用于所有商品。
  3. 支持事务验证和监听,保证支付安全。
  4. 提供订阅管理和当前权益查询,简化订阅逻辑。
  5. 强大的测试工具和 App Store Server 集成,方便调试和管理。

StoreKit 2 提供了功能更强大且更易用的 API,是未来应用内支付开发的推荐方案。