2012-09-08 172 views
0

我用這個代碼來處理我的應用程序內購買:測試應用程序內購買

#pragma mark StoreKit Delegate 

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

      { 

      // show wait view here 
      // statusLabel.text = @"Processing..."; 

       } 
      break; 

     case SKPaymentTransactionStatePurchased: 

       { 

      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      // remove wait view and unlock feature 2 
      // statusLabel.text = @"Done!"; 
      UIAlertView *tmp = [[UIAlertView alloc] 
           initWithTitle:@"Complete" 
           message:@"You have unlocked Feature 2!" 
           delegate:self 
           cancelButtonTitle:nil 
           otherButtonTitles:@"Ok", nil]; 
      [tmp show]; 



      NSError *error = nil; 
      [SFHFKeychainUtils storeUsername:@"IAPStoreSave" andPassword:@"whatever" forServiceName:kStoredData updateExisting:YES error:&error]; 

      // apply purchase action - hide lock overlay and 

        [self.lockImage removeFromSuperview]; 

      // do other thing to enable the features 

        } 
      break; 

     case SKPaymentTransactionStateRestored: 
      { 

      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      // remove wait view here 
      // statusLabel.text = @""; 

       } 
      break; 

     case SKPaymentTransactionStateFailed: 

      { 

      if (transaction.error.code != SKErrorPaymentCancelled) { 
       NSLog(@"Error payment cancelled"); 
      } 
      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      // remove wait view here 
      // statusLabel.text = @"Purchase Error!"; 

      } 
      break; 

     default: 
      { 

       } 
      break; 
    } 
} 
} 

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

// remove wait view here 
    // statusLabel.text = @""; 

SKProduct *validProduct = nil; 
int count = [response.products count]; 

if (count>0) { 
    validProduct = [response.products objectAtIndex:0]; 

    SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.app.ID"]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 


} else { 
    UIAlertView *tmp = [[UIAlertView alloc] 
         initWithTitle:@"Not Available" 
         message:@"No products to purchase" 
         delegate:self 
         cancelButtonTitle:nil 
         otherButtonTitles:@"Ok", nil]; 
    [tmp show]; 

} 


} 
-(void)requestDidFinish:(SKRequest *)request 
{ 

} 

-(void)request:(SKRequest *)request didFailWithError:(NSError *)error 
{ 
     NSLog(@"Failed to connect with error: %@", [error localizedDescription]); 
} 

並以這種方式來啓動它:

SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"com.app.ID"]]; 


      request.delegate = self; 

      [request start]; 

在我的iTunes連接我設置在-app輸入我已輸入的產品ID,狀態爲「準備提交」,並且還顯示:「您的第一次應用程序內購買必須提交一個新的應用程序版本,請從In- 「版本詳細信息」頁面的「應用程序購買」部分,然後點擊「準備上傳二進制文件」。當我開始請求時,總是顯示警報NO PRODUCT AVAILABLE。我究竟做錯了什麼??

回答

0

您確定套件ID與Itunes Connect上的應用程序相同嗎?其次要檢查的是應用程序配置文件(如果它處理IAP) - 我認爲這可能是原因。讓我知道。