无法在应用购买中完成交易

时间:2014-09-23 19:52:28

标签: ios in-app-purchase

我有一个问题,它允许我下载apple托管内容或finishTransaction但不能同时下载;

#pragma mark -
#pragma mark SKPaymentTransactionObserver methods

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray     *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{

    switch (transaction.transactionState)
    {
        case SKPaymentTransactionStatePurchasing:

                NSLog(@"Purchasing");

            break;

        case SKPaymentTransactionStatePurchased:

            NSLog(@"Transaction State Purchased");

            [[SKPaymentQueue defaultQueue]startDownloads:transaction.downloads];




            break;

        case SKPaymentTransactionStateFailed:

            NSLog(@"Transaction State Failed");

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

            [self failedTransaction:transaction];

            break;

        case SKPaymentTransactionStateRestored:

             NSLog(@"Transaction State Restored");

            [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
            buyButton.enabled = NO;
            [buyButton setTitle:@"Purchased"
                       forState:UIControlStateDisabled];

            //break;
        default:
            break;

    }
}
}


- (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads;
{
for (SKDownload *download in downloads) {

    switch (download.downloadState) {

        case SKDownloadStateFinished:

            NSLog(@"Completing transaction-B");

            [self processDownload:download];
            [queue finishTransaction:download.transaction];
            [[SKPaymentQueue defaultQueue] finishTransaction:download.transaction];
            [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

        break;

        case SKDownloadStateActive:


            NSLog(@"%f", download.progress);
            NSLog(@"%f remaining", download.timeRemaining);

        break;

        default:
        break;


    }

}
}

-(void)completeTransaction:(SKPaymentTransaction *)transaction
{ //checked!!

NSLog(@"Complete transaction");

//[[SKPaymentQueue defaultQueue]finishTransaction:transaction];
buyButton.enabled = NO;
[buyButton setTitle:@"Purchased"
           forState:UIControlStateDisabled];
}

一般来说代码工作正常; 显示产品 我可以选择购买 登录请求

然后根据上面的代码下载工作并处理(移动到Document目录)。

但是,如果我在updatedTransactions中完成事务处理,则不会进行下载。 (有道理!)

如果我将来自updatedTransactions的[self completeTransaction:transaction]称为finishTransaction,我会得到相同的结果。

如果我忽略调用completeTransaction(根据代码),则会下载内容,但我似乎无法调用完成事务。

我在哪里/如何调用完成交易?

如此接近但到目前为止!!!

1 个答案:

答案 0 :(得分:0)

我过早地调用完成交易,我的下载无法完成。