自 iOS 13.4 起不再显示购买对话框

The purchase dialog does not show up since iOS 13.4

iOS 13.4 开始,应用内购买的对话框在行...

[[SKPaymentQueue defaultQueue] addPayment:payment]; 

...被执行。

Pre iOS13.4 在用户确认购买的地方出现了一个对话框弹出窗口,但现在什么也没有。 有谁知道可能导致此问题的原因?

备注:

尝试完全 "flush" 队列一次:

    - (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;
            }
*/
        }
    }

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

首先,确保您在 success/failure:

时完成交易

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

那么会发生什么情况,对话框会显示一次,然后该人会取消,然后从那时起,交易将保留在队列中并自动 return 取消,而不会再次显示对话框。完成交易清除它并允许对话框再次显示


如果这不起作用:

应 Apple 工程师的要求,我为此 (FB7648374) 提交了一个带有 App Store 日志记录和 sysdiagnose 的雷达

请也这样做:

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

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

1- 删除所有 IAPPayment 和 IAPProductRequest。

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

2- 删除所有交易。

func cleanTransactions() {
    reset()
    for transaction in SKPaymentQueue.default().transactions {
        SKPaymentQueue.default().finishTransaction(transaction)
    }
}

您也可以只重启设备