Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone SDK StoreKit的问题_Iphone_In App Purchase_Storekit - Fatal编程技术网

iPhone SDK StoreKit的问题

iPhone SDK StoreKit的问题,iphone,in-app-purchase,storekit,Iphone,In App Purchase,Storekit,在我的iPhone应用程序中,我使用StoreKit让用户可以在应用程序中购买订阅。我遇到的问题是,每当我启动应用程序SKPaymentTransactionStatePurchased时,都会突然将其发送给观察者,因此应用程序会一次又一次地尝试购买订阅。如果我尝试再次从应用程序中的订阅列表中购买订阅,我会收到一条消息:“您已经购买了此应用程序内购买,但尚未下载。”然后调用failedTransaction并取消SKErrorPaymentCancelled 编辑:我现在在苹果开发者论坛上找到了

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

编辑:我现在在苹果开发者论坛上找到了很多关于这个的帖子,例如:和/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];
}

我在第一次使用StoreKit时遇到了确切的问题,这是因为在实现代码时,我没有完成事务


因此,当您启动应用程序时,您需要在队列中循环并完成所有事务。你不需要这样做,因为你涵盖了所有结果(根据上面的代码,你做到了)。

在与苹果支持人员交谈后,我能够解决这个问题。这似乎是苹果公司的问题,现在已经解决。

谢谢您的回答!在我问了这个问题之后,我在苹果开发者论坛上发现了几个帖子,很多人都有同样的问题。我们使用StoreKit已经快一年了,没有出现任何问题,所以一定发生了一些变化。。。