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

时间:2014-03-12 23:13:48

标签: ios objective-c in-app-purchase in-app

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

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

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

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

2 个答案:

答案 0 :(得分:1)

完成CONSUMABLE IN-APP的交易后,下面的方法将触发添加此声明“[[SKPaymentQueue defaultQueue] finishTransaction:transaction]”以删除购买的产品。使用此声明可以避免警报消息(I早点买了,但没下载)。

-(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;

    }
}
}

答案 1 :(得分:0)

下次您的应用添加事务观察器时,事务将显示在队列中。

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