title: SKPaymentTransactionObserver - transaction fail
body: <p>I am working on an app with in-app-purchase up to the transaction part. </p>
  
  <p>I have a <code>purchaseViewController</code> to call up <code>getProductInfo</code> while launch:</p>
  
  <pre><code>-(void)getProductInfo: (CC3DeviceCameraOverlayUIViewController *) viewController
  {
      _homeViewController = viewController;
  
      if ([SKPaymentQueue canMakePayments])
      {
          SKProductsRequest *request = [[SKProductsRequest alloc]
                                        initWithProductIdentifiers:
                                        [NSSet setWithObject:self.productID]];
          request.delegate = self;
  
          [request start];
      }
      else
          _productDescription.text =
          @"Please enable In App Purchase in Settings";
  }
  </code></pre>
  
  <p>which is successful. Then I have a button to call <code>buyProduct</code>:</p>
  
  <pre><code>- (IBAction)buyProduct:(id)sender {
  
          SKPayment *payment = [SKPayment paymentWithProduct:_product];
      if(_myQueue == nil) {
          _myQueue =  [SKPaymentQueue defaultQueue];
      }
          [_myQueue addPayment:payment];
      NSLog(@"buyproduct happening %@", _product.localizedTitle);
  }
  </code></pre>
  
  <p>which also successful because I see the NSLog and the product title. 
  But after this, I always get a <code>transaction failed!</code> when the purchasing process up to</p>
  
  <pre><code>-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
  {
      for (SKPaymentTransaction *transaction in transactions)
      {
          switch (transaction.transactionState) {
              case SKPaymentTransactionStatePurchased:
  //                [self unlockFeature];
                  NSLog(@"Transaction purchased");
                  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                  if (_product.downloadable) {
                      [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
                  }
                  break;
              case SKPaymentTransactionStateRestored:
                  if (transaction.downloads) {
                      [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
                      NSLog(@"Transaction downloading now...");
                  } else {
                      // unlock features
                      [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                      NSLog(@"Transaction finish");
                  }
                  break;
              case SKPaymentTransactionStateFailed:
                  NSLog(@"Transaction Failed");
                  [[SKPaymentQueue defaultQueue]
                   finishTransaction:transaction];
                  break;
  
              default:
                  break;
          }
      }
  }
  </code></pre>
  
  <p>What seems to be wrong and how can I debug this part? Is there a way for me to clear previous transaction test or check if there is any pending transaction interfere with the current test? I am still testing it in sandbox mode. The error was thrown in a quite immediate manner that give me the impression that it did not really go through Apple server and the transaction error happen locally, some sort of previous transaction test conflict or something that I still yet to find out.</p>
  
  <p>One more point to mention is that I am purchasing non-consumable item, which if transaction successful, it will trigger the download(I hope.).</p>