处理购买结果:PurchaseResult
当用户完成购买流程后,StoreKit 会返回一个 PurchaseResult。这个结果至关重要,因为它决定了你的应用如何响应。理解 PurchaseResult 的不同状态是成功处理购买的关键。你将看到它如何简化复杂的购买逻辑。
理解 PurchaseResult 的状态
PurchaseResult 枚举有几个不同的案例,每个都代表了购买交易的不同阶段或结果。正确处理这些状态能确保你的应用提供流畅的用户体验。例如,一个成功的购买会立即解锁内容。
.success(Product.Purchase): 🥳 这表示购买已成功完成。你现在可以为用户解锁他们购买的内容或服务了。这是最令人兴奋的结果!.pending: ⏳ 购买正在等待外部操作,例如“询问购买”或家长批准。你需要等待进一步的通知才能完成交易。.cancelled: ❌ 用户取消了购买。在这种情况下,你不需要采取任何行动,只需保持原样即可。.failed(Error): 😟 购买失败了,并附带一个错误。你需要处理这个错误,并可能向用户显示一条消息。
处理成功的购买
当 PurchaseResult 返回 .success 时,你将获得一个 Product.Purchase 对象。这个对象包含了所有关于已完成交易的详细信息。你需要验证这个购买,并将其记录下来。
swift
switch result {
case .success(let purchase):
// 验证并处理购买
print("购买成功!交易ID: \(purchase.id)")
// 接下来,你需要验证这个购买并更新用户权限
case .pending:
print("购买待处理,等待外部操作。")
case .cancelled:
print("购买已取消。")
case .failed(let error):
print("购买失败: \(error.localizedDescription)")
}验证与更新用户权限
在收到成功的 PurchaseResult 后,下一步是验证购买并更新用户的订阅状态。这通常涉及检查交易的有效性,并将其持久化到你的应用数据中。大约 99% 的成功购买都需要这一步。
- 验证交易: 确保交易是真实的,并且没有被篡改。StoreKit 2 提供了内置的验证机制。
- 更新用户界面: 根据购买结果更新 UI,例如显示“已订阅”状态。
- 持久化数据: 将购买信息保存到本地或远程服务器,以便用户下次打开应用时仍能访问其内容。
通过精心处理 PurchaseResult 的每种情况,你将构建一个健壮且用户友好的订阅系统。这不仅提升了用户满意度,也确保了你的应用内购流程的可靠性。🚀