完成交易: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(),您可以显著提高用户体验。 🥳 您的用户会感谢您流畅的购买流程。