Skip to content

启动购买流程

发起购买请求是用户订阅或购买应用内产品的关键一步。您将使用 Product 对象的 purchase() 方法来启动这个过程。这个方法是异步的,意味着它会立即返回,而实际的购买操作会在后台进行。🚀

调用 purchase() 方法时,系统会自动处理用户界面。这包括显示购买确认弹窗,以及在需要时引导用户进行身份验证。整个过程对用户来说非常流畅。

purchase() 方法详解

purchase() 方法是 Product 结构体的一部分。它返回一个 PurchaseResult 枚举,您需要处理这个结果来确定购买是否成功。这个方法是 async throws 的,所以您需要使用 await 关键字来调用它,并用 do-catch 块来捕获可能发生的错误。

swift
func buy(_ product: Product) async throws {
    let result = try await product.purchase()

    switch result {
    case .success(let verification):
        // 处理成功的购买
        break
    case .pending:
        // 购买待处理(例如,需要家长批准)
        break
    case .userCancelled:
        // 用户取消了购买
        break
    case .unverified:
        // 购买未经验证
        break
    @unknown default:
        // 处理未来可能新增的案例
        break
    }
}

您会发现这个方法非常强大,因为它将复杂的购买逻辑封装起来。

处理购买结果

purchase() 方法的返回值 PurchaseResult 是一个枚举,它有几个重要的案例。每个案例都代表了购买流程中的一种特定状态。理解这些状态对于构建健壮的购买逻辑至关重要。

  • .success(let verification):这表示购买成功。您会收到一个 verification 对象,其中包含交易的详细信息。这是您最希望看到的结果!🎉
  • .pending:购买处于待处理状态。这通常发生在“询问购买”功能启用时,例如儿童账户需要家长批准。
  • .userCancelled:用户在购买过程中取消了操作。这很常见,您需要优雅地处理这种情况。
  • .unverified:购买未经验证。这可能表示存在欺诈风险或网络问题。

处理这些不同的结果,确保您的应用能够对每种情况做出正确的响应。

最佳实践与注意事项

在调用 purchase() 方法之前,确保您已经获取了最新的产品信息。过时的产品信息可能导致购买失败或显示不正确的价格。定期刷新产品列表是一个好习惯。

在实际应用中,您应该在用户点击“购买”按钮后立即调用此方法。同时,考虑在购买过程中禁用购买按钮,以防止用户重复点击,从而避免不必要的错误或重复交易。

记住,网络连接对于购买流程至关重要。在网络不稳定时,purchase() 方法可能会抛出错误。因此,实现适当的错误处理机制是必不可少的。例如,您可以显示一个友好的提示,告知用户检查网络连接。📶

本站使用 VitePress 制作