首页 文章

多任务处理和SKPaymentQueue我得到一个“卡住”的SKPaymentTransaction,其交易状态为SKPaymentTransactionStatePurchasing

提问于
浏览
4

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

  • 用户按下"Buy"后立即隐藏按钮并显示微调器(基本上取消了购买操作) .

  • 用户按下取消到StoreKit对话框(在应用程序或其外部)会导致微调器消失 .

我试图根据观察SKPaymentQueue中的交易状态来显示和隐藏微调器 .

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

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

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

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

如果在添加付款后立即进行任务处理,则在返回应用程序之前,事务不会显示在队列中 . 而不是看到对updatedTransactions委托的两次调用(一个具有购买状态,一个具有失败状态),只有一次调用具有购买状态的updatedTransactions委托 . 交易永远不会失败 .

非常偶然地,当回到应用程序时,我将获得一个事务删除回调(在看到具有购买状态的updatedTransaction之后) . 即使在这种情况下,我也从未看到事务的预期更新到失败状态 .

我无法在应用程序商店的应用程序中重现这种行为(它们总是正确地显示/隐藏旋转器,无论是否有任务),但是我不清楚是否因为他们做了一些棘手的事情,或者它只是沙箱中的问题 .

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

谢谢!

1 回答

  • -1

    我已将MKStoreKit用于我的所有应用 .

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

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

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

相关问题