iPhone SDK StoreKit存在问题

时间:2010-11-03 20:40:48

标签: iphone in-app-purchase storekit

在我的iPhone应用程序中我使用StoreKit使用户可以在应用程序中购买订阅。我遇到的问题是,每次我启动应用程序时突然发送SKPaymentTransactionStatePurchased发送给观察者,以便应用程序尝试一次又一次地购买订阅。如果我尝试再次从应用程序中的订阅列表中购买订阅,我会收到一条消息,说“您已经购买了此应用程序内购买,但尚未下载。”然后使用SKErrorPaymentCancelled调用failedTransaction。

编辑:我现在已经在Apple开发者论坛上发现了很多关于这个问题的帖子,例如:https://devforums.apple.com/thread/73818和/ thread / 73572,好像很多开发人员都有同样的问题..

这是我正在使用的代码,你能看到它有什么问题吗?

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
        case SKPaymentTransactionStatePurchased:
            [self completeTransaction:transaction];
            break;
        case SKPaymentTransactionStateFailed:
            [self failedTransaction:transaction];
            break;
        case SKPaymentTransactionStateRestored:
            [self restoreTransaction:transaction];
            default:
            break;
        }
    }
}

-(void) failedTransaction: (SKPaymentTransaction *)transaction
{
    if (transaction.error.code != SKErrorPaymentCancelled)
    {
        NSLog(@"Error"); 
    } else {
        NSLog(@"Cancel");
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

-(void) restoreTransaction: (SKPaymentTransaction *)transaction
{
    [self subscribe:transaction];
}

-(void) completeTransaction: (SKPaymentTransaction *)transaction
{
    [self subscribe:transaction];
}

-(void)subscribe: (SKPaymentTransaction*)transaction { 
    NSInteger errorCode = //Connects to my server that verifies receipt with Apple server etc..
    if (errorCode==0) {
        [self provideContent];
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

2 个答案:

答案 0 :(得分:0)

第一次使用StoreKit时遇到了确切的问题,因为当我实现代码时,我的交易未完成。

因此,当您启动应用程序时,您需要遍历队列并完成所有事务。您不应该这样做是因为您涵盖了所有结果(根据上面的代码,您已经完成了)。

答案 1 :(得分:0)

在与Apple支持人员交谈后,我能够解决这个问题。 Apple似乎已经解决了这个问题。