6

iOS 13.4开始,当行...

[[SKPaymentQueue defaultQueue] addPayment:payment]; 

...被执行。

在 iOS 13.4之前,用户确认购买的地方会弹出一个对话框,但现在什么也没有。有谁知道可能导致此问题的原因?

笔记:

  • 这是一款基于 libSDL 和 gles 3.0 的全屏游戏。
  • 虽然 99% 的代码库是 C++,但应用内购买是用 Objective C++ 进行的
  • 它在 iOS 13.4 之前工作
4

4 回答 4

6

尝试完全“刷新”队列一次:

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
        for (SKPaymentTransaction *transaction in transactions) {

        //debug - finish all transactions to make queue empty  
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
/*
            switch (transaction.transactionState) {
                case SKPaymentTransactionStatePurchased:
                     //your code 
                     [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                     break;

                case SKPaymentTransactionStateFailed:
                    //your code 
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                    break;
            }
*/
        }
    }

然后用您的代码替换它并尝试购买。

于 2020-03-31T16:04:32.443 回答
4

首先,确保您在成功/失败时完成交易:

在我们的例子中,旧代码没有调用SKPaymentQueue.default().finishTransaction(transaction)将其从队列中删除。在 iOS 13.4 之前,这显然工作得很好,即使文档说它是必需的

所以会发生的情况是对话框将显示一次,然后该人将取消,然后从该点开始,事务将保留在队列中并自动返回为已取消,而不再显示对话框。完成事务会清除它并允许对话框再次显示


如果这不起作用:

根据 Apple 工程师的要求,我为此提交了一份雷达 (FB7648374),其中包含 App Store 日志记录和 sysdiagnose

请做同样的事情:

于 2020-04-01T23:48:35.623 回答
1

我遇到了同样的问题,这就是我解决它的方法。

对每个购买交易执行以下操作。

1- 删除所有 IAPPayment 和 IAPProductRequest。

func reset() {
    requests.removeAll()
    payments.removeAll()
}

2-删除所有交易。

func cleanTransactions() {
    reset()
    for transaction in SKPaymentQueue.default().transactions {
        SKPaymentQueue.default().finishTransaction(transaction)
    }
}
于 2020-09-14T12:11:02.797 回答
-1

您也可以重新启动设备

于 2021-01-20T13:48:35.293 回答