Reputation: 61
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
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