从iOS 13.4开始,当行...
[[SKPaymentQueue defaultQueue] addPayment:payment];
...被执行。
在 iOS 13.4之前,用户确认购买的地方会弹出一个对话框,但现在什么也没有。有谁知道可能导致此问题的原因?
笔记:
- 这是一款基于 libSDL 和 gles 3.0 的全屏游戏。
- 虽然 99% 的代码库是 C++,但应用内购买是用 Objective C++ 进行的
- 它在 iOS 13.4 之前工作
从iOS 13.4开始,当行...
[[SKPaymentQueue defaultQueue] addPayment:payment];
...被执行。
在 iOS 13.4之前,用户确认购买的地方会弹出一个对话框,但现在什么也没有。有谁知道可能导致此问题的原因?
笔记:
尝试完全“刷新”队列一次:
- (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;
}
*/
}
}
然后用您的代码替换它并尝试购买。
首先,确保您在成功/失败时完成交易:
在我们的例子中,旧代码没有调用SKPaymentQueue.default().finishTransaction(transaction)
将其从队列中删除。在 iOS 13.4 之前,这显然工作得很好,即使文档说它是必需的
所以会发生的情况是对话框将显示一次,然后该人将取消,然后从该点开始,事务将保留在队列中并自动返回为已取消,而不再显示对话框。完成事务会清除它并允许对话框再次显示
如果这不起作用:
根据 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)
}
}
您也可以重新启动设备