首页 文章

如何处理未完成的iOS应用内购买耗材?

提问于
浏览
2

我检查并处理服务器端的IAP收据(消耗品),只有在应用程序恢复正常时才在应用程序上调用 [[SKPaymentQueue defaultQueue] finishTransaction:transaction] .

当服务器没有返回时(无论出于何种原因),应用程序正确无法完成事务 .

我现在的问题是:应用程序需要做什么才能再次接收收据以进行重试,或者iOS通过调用 - (void)paymentQueue:(SKPaymentQueue *)队列updatedTransactions:(NSArray *)transactions来处理这个问题 . ?当我重新启动我的应用程序时,该项目被重新提交;但是用户不需要重新启动应用程序 .

相关问题:当我再次尝试购买尚未处理的项目时(在沙箱上),我收到了一条iOS警报,说我之前购买但未下载 . 为什么是这样?我希望(并且实际上已经看到)非消耗品 . 我可以购买另一种消耗品,前一种消费品仍在等待中 .

2 回答

  • 1

    完成CONSUMABLE IN-APP的交易后,下面的方法将触发添加此语句“[[SKPaymentQueue defaultQueue] finishTransaction:transaction]”以删除购买的产品 . 使用此语句可以避免警报消息(我之前购买过)但没下载) .

    -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
    {
     for (SKPaymentTransaction *transaction in transactions)
     {        
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                if (transaction.downloads)
                {
                    [[SKPaymentQueue defaultQueue]
                     startDownloads:transaction.downloads];
                } else {
                    //Add the following line to remove purchased observer
                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];                    
                }
                break;
    
            case SKPaymentTransactionStateFailed:
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
    
                break;
    
        }
    }
    }
    
  • 0

    下次App添加事务观察器时,事务将显示在队列中 .

    也许这就是为什么你得到“尚未下载”的消息 - 这意味着'应用程序商店尚未获得finishTransaction' .

相关问题