【问题标题】:Multitasking and SKPaymentQueue I get a "stuck" SKPaymentTransaction with a transactionState of SKPaymentTransactionStatePurchasing多任务处理和 SKPaymentQueue 我得到一个“卡住”的 SKPaymentTransaction,其 transactionState 为 SKPaymentTransactionStatePurchasing
【发布时间】:2012-01-30 22:09:36
【问题描述】:

我的问题基本上是如何重现我在应用商店的其他应用中看到的关于应用内购买的行为:

  • 在用户按下“购买”按钮后立即隐藏并显示一个微调器(本质上是消除购买操作的反弹)。
  • 用户在 StoreKit 对话框(在应用程序中或应用程序之外)按取消会导致微调器消失。

我正在尝试根据 SKPaymentQueue 中的交易状态来显示和隐藏微调器。

这张海报描述了我的问题:

In App Purchase user cancels tx while app in background: tx state stays on purchasing

无论测试用户是否先登录,我都看到与上述帖子相同的行为。交易基本上“卡在”队列中,永远处于购买状态(意味着我的微调器永远显示)。当应用程序完全退出并重新启动(不仅仅是多任务处理)时,交易不再在支付队列中,所以它显然不是真的还在购买。这就像 SKPaymentQueue “错过”了状态变化。

我注意到的更多细节是,在典型情况下,在添加付款后,交易立即以购买状态显示在队列中。如果用户按下取消,则事务状态变为失败。

在添加付款后立即执行任务的情况下,交易不会显示在队列中,直到任务返回应用程序。而不是看到对 updatedTransactions 委托的两次调用(一个具有购买状态,一个具有失败状态),只有一个对 updatedTransactions 委托的调用,具有购买状态。交易永远不会失败。

非常偶尔,当我返回应用程序时,我会收到一个删除交易的回调(在看到 updatedTransaction 和购买状态之后)。即使在这种情况下,我也永远不会看到预期的事务更新为失败状态。

我无法在应用商店的应用中重现此行为(无论是否执行任务,它们始终正确显示/隐藏微调器),但我不清楚这是因为它们在做一些棘手的事情,还是如果只是沙盒中的问题。

如果不通过监控事务的状态,如何复制这种行为?这不是生产中的问题吗?

谢谢!

【问题讨论】:

标签: iphone ios in-app-purchase storekit


【解决方案1】:

我的所有应用都使用了MKStoreKit

它有一个基于块的界面,告诉您事务何时开始(隐藏按钮并开始动画)。

它还会告诉您事务是否失败或已完成,因此您可以停止动画并恢复按钮(如果失败)或在完成时显示其他内容。

因为它使用块,您可以处理所有这些行为而无需编写大量样板代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多