首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKPaymentTransaction transactionState购买后未成为SKPaymentTransactionStatePurchased

SKPaymentTransaction transactionState购买后未成为SKPaymentTransactionStatePurchased
EN

Stack Overflow用户
提问于 2012-04-20 17:55:40
回答 1查看 2.4K关注 0票数 1

我已经实现了应用内支付,就像苹果文档中关于IAP的描述一样,但当我在沙盒模式下尝试它们时,'transactionState‘永远不会更改为SKPaymentTransactionStatePurchased。(它会永远留在SKPaymentTransactionStatePurchasing上。)

有人知道哪里出了问题吗?

代码语言:javascript
复制
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        NSLog(@"%ld", transaction.transactionState);
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                [self restoreTransaction:transaction];
            default:
                break;
        }
    }
}

- (void)completeTransaction:(SKPaymentTransaction *)transaction
{
    [self recordTransaction:transaction];
    [self provideContent:transaction.payment.productIdentifier];
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

- (void)failedTransaction:(SKPaymentTransaction *)transaction
{
    if (transaction.error.code != SKErrorPaymentCancelled) {
        [NSAlert alertWithError:transaction.error];
    }
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

- (void)restoreTransaction:(SKPaymentTransaction *)transaction
{
    [self recordTransaction:transaction];
    [self provideContent:transaction.originalTransaction.payment.productIdentifier];
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

- (void)recordTransaction:(SKPaymentTransaction *)transaction
{
    NSLog(@"Record Transaction...");
    // ToDo: Implement 'recordTransaction'.
}

- (void)provideContent:(NSString *)productIdentifier
{
    NSLog(@"Provide Content");
    // ToDo: Implement 'provideContent'.
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-27 17:17:44

在不同的机器上测试了相同的代码。它可以在我的开发机器上正常工作。看起来这不是我的准则。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10243978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档