我有一个应用程序内购买设置,它可以工作,除非用户按下"取消"它仍然最终购买该产品

时间:2014-04-08 04:32:27

标签: ios in-app-purchase

当iPad提示您“确认您的应用程序内购买”时,如果您点击“取消”,那么它似乎仍然会为该用户购买该产品。因为如果我再尝试再次购买,然后确认购买,那么它会给我一个警告,说“你已经购买了它。你想再免费获得吗?”

注意:这都在环境沙箱中,所以也许这就是原因?这是我的代码:

- (IBAction)makePurchase:(id)sender {
    SKPayment *payment = [SKPayment paymentWithProduct:_product];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

-(void)getProductInfo: (drawKitViewController *) viewController
{

    if ([SKPaymentQueue canMakePayments])
    {
        SKProductsRequest *request = [[SKProductsRequest alloc]
                                      initWithProductIdentifiers:
                                      [NSSet setWithObject:self.productID]];
        request.delegate = self;

        [request start];
    }
}

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{

    NSArray *products = response.products;

    if (products.count != 0)
    {
        _product = products[0];
            }
    else {

    }

    products = response.invalidProductIdentifiers;

    for (SKProduct *product in products)
    {
        NSLog(@"Product not found: %@", product);
    }
}

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                 [self unlockCreateAccount];
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                break;

            case SKPaymentTransactionStateFailed:
                NSLog(@"Transaction Failed");
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                break;

            default:
                break;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

这是因为您的应用内购买产品是Non-consumable。这意味着一旦您成功购买此产品。你不需要再买它。 如果您仍然尝试购买它而不是恢复之前购买的产品,您将收到警告"您已经购买了此产品。你想免费获得它吗?"。

BTW:您必须为用户提供恢复应用中之前购买的产品功能的入口。否则你的应用将被拒绝(我的经验)。

答案 1 :(得分:0)

这是执行购买操作的行

[SKPaymentQueue defaultQueue] addPayment:payment];

只要您在用户取消操作时不执行此代码,购买就不会通过。

但是,对于非消耗品购买,如果您的测试用户在过去的任何时间购买了该商品,您将收到您所描述的消息。您可以做的唯一事情是设置一个新的测试Apple ID用于购买或创建不同的应用内商品。