2012-06-21 93 views
1

這是代碼:應用內購買不適用於iPhone?

-(IBAction)purchase5010:(id)sender{ 

    productUserRequests = 0; 
    SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.mobice.wtm.5010"]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 


} 

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
    SKProduct *validProduct = nil; 
    int count = [response.products count]; 
    if (count > 0) { 
    validProduct = [response.products objectAtIndex:productUserRequests]; 
    }else if(!validProduct){ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No products available at this time." 
                delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    [self dismissModalViewControllerAnimated:YES]; 
    } 
} 

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 
    SKProduct *validProduct = nil; 
    int count = [response.products count]; 
    if (count > 0) { 
    validProduct = [response.products objectAtIndex:productUserRequests]; 
    }else if(!validProduct){ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No products available at this time." 
                delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    [self dismissModalViewControllerAnimated:YES]; 
    } 
} 
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{ 
    for (SKPaymentTransaction *transaction in transactions) { 
    switch (transaction.transactionState) { 
     case SKPaymentTransactionStatePurchasing: 

      break; 
     case SKPaymentTransactionStatePurchased: 
      if (productUserRequests == 0) { 
       NSString *hints = [[NSString alloc]initWithContentsOfFile:[self pathOfFile:@"Hints"]]; 
       int hintValue = [hints intValue]; 
       hintValue+=50; 
       [hints release]; 
       hints = [[NSString alloc]initWithFormat:@"%i", hintValue]; 
       [hints writeToFile:[self pathOfFile:@"Hints"] atomically:YES]; 

       NSString *reveals = [[NSString alloc]initWithContentsOfFile:[self pathOfFile:@"Reveals"]]; 
       int revealValue = [reveals intValue]; 
       revealValue+=50; 
       [reveals release]; 
       reveals = [[NSString alloc]initWithFormat:@"%i", revealValue]; 
       [reveals writeToFile:[self pathOfFile:@"Reveals"] atomically:YES]; 


      }else if(productUserRequests == 1){ 
       NSString *hints = [[NSString alloc]initWithContentsOfFile:[self pathOfFile:@"Hints"]]; 
       int hintValue = [hints intValue]; 
       hintValue+=150; 
       [hints release]; 
       hints = [[NSString alloc]initWithFormat:@"%i", hintValue]; 
       [hints writeToFile:[self pathOfFile:@"Hints"] atomically:YES]; 

       NSString *reveals = [[NSString alloc]initWithContentsOfFile:[self pathOfFile:@"Reveals"]]; 
       int revealValue = [reveals intValue]; 
       revealValue+=20; 
       [reveals release]; 
       reveals = [[NSString alloc]initWithFormat:@"%i", revealValue]; 
       [reveals writeToFile:[self pathOfFile:@"Reveals"] atomically:YES]; 
      } 
    case SKPaymentTransactionStateFailed: 
      if (transaction.error.code != SKErrorPaymentCancelled) { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"In-app purchase failed. No money was charged." 
                   delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
       [alert show]; 
       [alert release]; 

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

現在,每當我試圖購買該項目,它說,也「應用內購買失敗,沒有錢被指控「可在這個時候沒有產品。」。 「 我想知道,上面的代碼有問題嗎?或者它更可能是一個iTunes連接問題?

+1

你編碼好名單風格幾乎是不可讀的。請使用適當的間距,線條長度和縮進。 – 2012-06-21 06:04:25

+0

您是否像添加了IAP一樣將com.mobice.wtm.5010添加到itunnes連接並啓用了IAP?另外,請確保已選中「準備銷售」。 – Basel

回答

0

取而代之的是請求的完整包ID:@"com.mobice.wtm.5010",請繼續並提供它只是一個@"5010"。 比如我有一個產品com.example.somerandomapp.track01下面的代碼工作:

SKPayment *paymentRequest = [SKPayment paymentWithProductIdentifier: @"track01"]; 

有很多不同的因素都可能導致錯誤,這是什麼會導致失敗here