如何处理SKPaymentTransactionStateDeferred?

7

我正在为我的应用程序添加应用内购买功能。 我有一些疑问。

如何处理SKPaymentTransactionStateDeferred? 在这种状态下,我们需要自己实现还是由苹果处理?

如果我们需要实现,意味着在这里如何处理呢? 如何使用沙盒测试帐户进行测试? 请有经验的人告诉我。先感谢您。

1个回答

8
根据 Apple StoreKit 文档,延迟状态是指:
该交易在队列中等待处理,但其最终状态取决于外部操作(如请求购买)。更新您的 UI 以显示延迟状态,并等待另一个回调以指示最终状态。
如果用户参与了 Apple 家庭共享并启用了“请求购买”选项,则会获得交易延迟状态。
当子用户尝试购买应用内产品时,将向父用户发送请求以进行批准。在请求购买流程开始后,父用户有 24 小时时间批准或取消其子用户的购买请求。如果父用户未能在 24 小时内响应,则该请求将从 iTunes Store 服务器中删除,且您的应用程序观察器将不会收到任何通知。 您应更新您的 UI 以反映此延迟状态。等待交易更新时,避免阻塞您的 UI 或游戏玩法。沙盒环境中,我们可以使用 SKMutablePayment 进行测试以获取延迟状态,例如:
let product = SKMutablePayment(product: productDetails)
product.simulatesAskToBuyInSandbox = true //Enable to test deferred state.
SKPaymentQueue.defaultQueue().addPayment(product)

提示信息:

iOS 8引入了“询问购买”功能,让家长可以批准孩子发起的任何购买行为,包括App Store上的应用或应用内购买。当孩子请求购买时,“询问购买”会发送Deferred状态,表示该应用正在等待家长批准该购买。


我用这个来测试我的应用程序中的延迟付款,但我不知道如何批准或拒绝请求。延迟交易仍在我的队列中,我不知道如何摆脱它。有人在沙盒中做过这个吗? - Adam Langsner
我们需要为延迟状态调用finish transaction吗?还是直接调用finish transaction是安全的? - otakuProgrammer
3
不,我们不需要完成延迟状态的交易。它将保持在交易队列中24小时,在此期间,如果父母允许购买物品,则我们将在交易观察器中获得已购买状态,否则在24小时后我们将获得交易失败观察器。 - Sagar Thummar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接