Rendel
Rendel

Reputation: 61

In-App Purchase failed transactions

I use in-app purchases in my application, exactly consumable. But when everything goes fine before I test it. When I enter test user ID and password it goes into the SKPaymentTransactionStateFailed.
Here is some code I use:

- (void) funcPrepareForPurchasing:(NSString *)stringType
{
if([SKPaymentQueue canMakePayments])
{
    NSLog(@"Parental Controls are disabled");

    SKProductsRequest *pr = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:[NSString stringWithFormat:@"com.Company.AppName.%@", stringType]]];
    pr.delegate = self;
    [pr start];
}
else
{
    UIAlertView *alertviewPR = [[UIAlertView alloc] initWithTitle:@"Parental Controls" message:@"Parental Controls are On" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:NO, nil];
    [alertviewPR show];
}
}

- (void) funcPurchaseBonusScores
{
SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.Company.AppName.BonusScores"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (void) funcPurchaseBonusLife
{
SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"om.Company.AppName.BonusLife"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (void) funcPurchaseBonusStar
{
SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.Company.AppName.BonusStar2"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
SKProduct *vp = nil;
int count = [response.products count];
NSLog(@"%i", count);
if(count)
    vp = [response.products objectAtIndex:0];
else if(!vp)
    NSLog(@"No Prodacts are available");
}

- (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for(SKPaymentTransaction *transaction in transactions)
{
    switch (transaction.transactionState)
    {
        case SKPaymentTransactionStatePurchasing:

            NSLog(@"yidulobs = purchasing");
            break;

        case SKPaymentTransactionStatePurchased:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            userDefaultsInApps = [NSUserDefaults standardUserDefaults];
            if( intInApps == 1 )
                [userDefaultsInApps setInteger:5 forKey:@"keyScores"];
            else if( intInApps == 2 )
                [userDefaultsInApps setInteger:5 forKey:@"keyLife"];
            else if( intInApps == 3 )
                [userDefaultsInApps setInteger:5 forKey:@"keyStar"];
            [userDefaultsInApps synchronize];

            NSLog(@"gadaixada");

            break;

        case SKPaymentTransactionStateRestored:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            break;

        case SKPaymentTransactionStateFailed:

            NSLog(@"Error an Cancelled!!!");
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            break;
    }
    }    
    }

Then I try to purchase with this function:

- (void) func1
{
    intInApps = 1;
    [self funcPrepareForPurchasing:@"BonusScores"];
    [self funcPurchaseBonusScores];
}
- (void) func2
{
    intInApps = 2;
    [self funcPrepareForPurchasing:@"BonusLife"];
    [self funcPurchaseBonusLife];
}
- (void) func3
{
    intInApps = 3;
    [self funcPrepareForPurchasing:@"BonusStar2"];
    [self funcPurchaseBonusStar];
}

What mistake have I done?

Upvotes: 1

Views: 831

Answers (1)

Rendel
Rendel

Reputation: 61

I was testing it on the simulator. In-apps doesn't work on it. It's necessary to test it on a device.

Upvotes: 2

Related Questions