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

Vik*_*ehr 6 objective-c objective-c++ in-app-purchase ios skpaymenttransaction

iOS 13.4 开始,当行...

[[SKPaymentQueue defaultQueue] addPayment:payment]; 
Run Code Online (Sandbox Code Playgroud)

……被处决。

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

笔记:

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

Gab*_*den 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;
            }
*/
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后将其替换回您的代码并尝试购买。

  • 实际上你应该总是自己“完成交易”。为了清楚起见,我已经更新了答案。 (2认同)

iwa*_*bed 5

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

\n\n

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

\n\n

因此,会发生的情况是,对话框将显示一次,用户会取消,然后从那时起,事务将保留在队列中,并自动返回为已取消,而不会再次显示对话框。完成事务将清除它并允许对话框再次显示

\n\n
\n\n

如果这不起作用:

\n\n

根据 Apple 工程师的要求,我通过 App Store 日志记录和 sysdiagnose 提交了一个雷达(FB7648374)

\n\n

请做同样的事情:

\n\n\n