我们有报告说用户无法在我们的游戏中购买IAP。我们做了一些研究,发现我们丢失的互联网连接消息还有很多不足之处,所以我们修复了这个问题。我们发现了一个非常奇怪的问题,但这让我感到困惑。如果在购买过程中连接中断,则该帐户上的所有未来购买既不会失败也不会完整。
我们使用以下方式开始购买:
[[SKPaymentQueue defaultQueue] addPayment:payment].
这将启动触发弹出窗口登录并完成购买的过程。如果在登录面板消失后不久连接断开,那么事务永远不会更新,它永远不会超过SKPaymentTransactionStatePurchasing状态。
如果连接以不表示可达性变化的方式退出,这只能起作用(中断),通过设置高丢包率(50-100%工作)使用Network Link Conditioner可以轻松复制。值得注意的是,我们能够通过在我们的办公楼周围移动到不良的wifi区域,在笔记本电脑上复制这个。 IAP在稳固的网络条件下运行良好。
这本身并不是一个大问题,大问题是所有后续购买也会陷入SKPaymentTransactionStatePurchasing状态。 paymentQueue:updatedTransactions:当购买以空白的transactionID开始并且状态为SKPaymentTransactionStatePurchasing时调用。不再发生更新。
我们尽早添加观察者(在应用程序启动时),并且不要更改它,因此没有多个观察者。我打印了日志以确保传递给观察者的队列也匹配defaultQueue。
更令人沮丧的是,这似乎与账户有关。如果我退出商店,购买将触发登录,如果我使用新的测试帐户登录,它将按预期完成。如果我使用仍在SKPaymentTransactionStatePurchasing状态下购买的帐户登录,则所有购买都将被卡住。
有没有人遇到此问题,是否有人知道某种解决方法或有任何建议?