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
相关产品推荐
相关产品推荐

