2012-09-08 45 views
1

我在我的應用程序中使用應用程序內購買,完全消耗。但是當我測試之前一切都很好。當我輸入測試用戶ID和密碼時,它會進入SKPaymentTransactionStateFailed。
下面是一些代碼,我用:應用程序內購買失敗的交易

- (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; 
    } 
    }  
    } 

然後我儘量購買使用此項功能:

- (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]; 
} 

我做了什麼錯?

+0

此外,「但是,當我測試它之前一切都很好。」沒有意義。你什麼意思? – occulus

+0

關於這個問題的任何想法? 謝謝 – Rendel

回答

2

我正在模擬器上測試它。 In-apps不起作用。有必要在設備上進行測試。

相關問題