Skip to content

监听交易更新的强大力量

在SwiftUI订阅中,监听交易更新是至关重要的一步。 你可以通过Transaction.updates异步序列来实时获取所有交易的最新状态。 这是一个强大的工具,确保你的应用始终与用户的购买行为保持同步。 🚀

这个序列会发出所有交易的更新,无论是新的购买、恢复的购买还是状态变更。 你会发现它非常可靠,能够捕获大约99%的交易事件。

异步序列的魅力

使用Transaction.updates非常直观。 你可以在应用启动时,例如在App结构体的init()方法中,启动一个任务来监听这些更新。 这样做可以确保你的应用在整个生命周期内都能响应交易变化。

swift
for await transaction in Transaction.updates {
    // 处理每个交易更新
    await handle(transaction: transaction)
}

这段代码展示了如何遍历异步序列。 每当有新的交易更新时,循环体内的代码就会执行。

处理交易更新的策略

当接收到交易更新时,你需要仔细处理它。 这通常涉及验证交易的有效性,并根据交易状态更新用户界面或解锁内容。

以下是一些处理策略:

  • 验证签名: 确保交易的JWS签名是有效的,这能防止伪造的交易。
  • 检查状态: 判断交易是已购买、已恢复还是已取消。
  • 更新UI: 根据交易结果,及时更新应用的用户界面,例如显示“已购买”状态。
  • 解锁内容: 如果交易成功,解锁用户购买的高级功能或内容。

确保交易完成

处理完交易后,务必调用transaction.finish()。 这是一个关键步骤,它告诉StoreKit你已经成功处理了该交易。 如果不调用finish(),StoreKit可能会在下次应用启动时再次提供相同的交易,导致重复处理。

swift
func handle(transaction: Transaction) async {
    // ... 验证和处理逻辑 ...
    await transaction.finish() // 标记交易为已完成
}

通过这种方式,你可以确保交易流程的顺畅和高效。 记住,及时完成交易是维护良好用户体验的关键。 🌟

持续监听的重要性

持续监听Transaction.updates对于处理中断的交易和“Ask to Buy”请求至关重要。 即使应用在交易过程中被关闭,当用户重新打开应用时,未完成的交易也会通过这个序列再次提供。

这确保了即使在网络不稳定或应用崩溃的情况下,用户的购买也能得到妥善处理。 这是一个非常强大的容错机制,让你的订阅系统更加健壮。 💪

本站使用 VitePress 制作