【问题标题】:finishTransaction: doesn't work完成交易:不起作用
【发布时间】:2011-08-19 20:34:08
【问题描述】:

我为应用内购买构建了一个项目。部分源码如下:

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    NSLog(@"paymentQueue update");
    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) completeTransaction: (SKPaymentTransaction *)transaction
{
    NSLog(@"completeTransaction");
    // Your application should implement these two methods.
    [self recordTransaction: transaction];
    [self provideContent: transaction.payment.productIdentifier];
    // Remove the transaction from the payment queue.
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

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

- (void) failedTransaction: (SKPaymentTransaction *)transaction
{
    NSLog(@"failedTransaction");
    if (transaction.error.code != SKErrorPaymentCancelled)
    {
        // Optionally, display an error here.
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

//Optional, record the transaction infomation
- (void) recordTransaction: (SKPaymentTransaction *)transaction{

    receipt=transaction.transactionReceipt;

    [[NSUserDefaults standardUserDefaults] setValue:transaction.transactionReceipt forKey:@"proUpgradeTransactionReceipt" ];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [self sendReceipt:receipt];

    expiredTime=transaction.transactionDate;
}

我可以在沙盒中成功添加付款和购买,
但在finishTransaction: 执行后,完成的事务不会从 defaultQueue 中删除。
当我添加付款时,defaultQueue 会累积。

我是不是犯了一些错误?
感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    真的是我的错……
    每次购买时我都会复制 StoreObserver 对象
    在我添加一个标志以防止重复后(如下),该错误已修复。

    static bool hasAddObserver=NO;
        -(void) recvPurchase:(NSString *)purchaseString{
            //check user's in-app purchase status
            if ([self CanPurchase]) {
                    /*=====================================*/
                if (!hasAddObserver) {//flag to fix this bug
                    /*=====================================*/
                    observer=[[StoreObserver alloc]init];
                    [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
                    hasAddObserver=YES;
                }
                SKPayment *payment = [SKPayment paymentWithProductIdentifier:purchaseString];
                [[SKPaymentQueue defaultQueue] addPayment:payment];
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2015-02-27
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多