You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS StoreKit 2中finish()的网络机制与错误处理技术问询

StoreKit 2中finish()方法的关键问题解答

1. finish()的执行逻辑

调用finish()时,会先在本地将Transaction的状态标记为finished,之后系统会在后台自动尝试联网同步至App Store。开发者无需等待网络请求完成,本地状态更新后,该交易就不会再出现在未完成交易的查询结果中。

2. finish()执行失败的处理方案

要避免消耗型内购重复发放,核心原则是先确保商品发放成功,再调用finish(),同时配合以下策略:

  • 记录每个交易的唯一标识(如transaction.id),发放商品前先检查该标识是否已处理过。可将已处理的交易ID存储在本地(比如UserDefaults、Keychain)或同步至后端服务器。
  • 若调用finish()时遇到文件I/O或无网络错误,无需立即手动重试。系统会自动在后台重试同步操作,只要本地已标记该交易为已处理,后续即使finish()重试成功,也不会触发重复发放。
  • App每次启动时,遍历所有未完成交易,先核对本地/后端的已处理记录,确认未发放再执行发放逻辑,完成后再调用finish()。

内容的提问来源于stack exchange,提问作者Jimsea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:24:51