Skip to content

完成交易:Transaction.finish()

为什么完成交易至关重要?

完成交易是订阅流程中不可或缺的一步。 🚀 它告诉StoreKit您已经成功处理了购买。 如果不调用 finish(),交易将保持挂起状态。

这意味着用户每次启动您的应用时,StoreKit都会尝试重新交付该交易。 这会导致重复的通知和潜在的混乱。

想象一下,用户购买了一项订阅,但每次打开应用都收到购买成功的提示。 这会非常令人沮丧!

如何调用 Transaction.finish()

调用 Transaction.finish() 非常简单。 您需要在处理完交易的所有逻辑之后执行此操作。

这包括验证签名、更新用户界面以及解锁高级功能。 确保所有这些步骤都已完成。

通常,您会在 Transaction.updates 监听器内部调用它。 这是一个关键的位置。

swift
for await transaction in Transaction.updates {
    switch transaction {
    case .verified(let verifiedTransaction):
        // 处理验证过的交易
        await verifiedTransaction.finish() // 在这里调用 finish()
    case .unverified(let unverifiedTransaction):
        // 处理未验证的交易
        break
    }
}

finish() 的最佳实践

调用 finish() 的时机非常重要。 您应该在以下情况后立即调用它:

  • 成功验证交易: 确保交易的JWS签名有效。
  • 更新用户权利: 用户已获得其购买的订阅或内容。
  • 持久化数据: 购买信息已安全存储在您的服务器或本地。

例如,如果您的应用需要与后端服务器同步订阅状态,请在服务器确认更新后调用 finish()。 这样可以确保数据一致性。

确保交易完成的可靠性

即使应用崩溃,StoreKit也会确保交易最终完成。 它会持续尝试重新交付未完成的交易。

这为您提供了一个强大的容错机制。 您可以放心,即使出现意外情况,交易也不会丢失。

根据统计,超过99%的交易在首次处理时就能成功完成。 剩下的1%通常是由于网络问题或应用中断。

通过正确使用 finish(),您可以显著提高用户体验。 🥳 您的用户会感谢您流畅的购买流程。

本站使用 VitePress 制作