ios - 应用内购买测试用户不起作用

标签 ios xcode in-app-purchase

我在使用应用内购买时遇到问题。每次我创建一个新的测试用户并在我使用密码点击确定后在我的 iPhone 上调试它时,我都会自动收到“你已经购买了这个但还没有下载它。”

我已将其添加到我的 viewDidLoad 中:

 [[SKPaymentQueue defaultQueue] addTransactionObserver:self];

我的购买函数如下所示:

- (IBAction)purchaseProduct:(id)sender { 
        SKProduct *product = [productArray objectAtIndex:0];  
        SKPayment *payment = [SKPayment paymentWithProduct:product];
       [[SKPaymentQueue defaultQueue] addPayment:payment];
 }

我还有:

-(void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions) {

    if ([transaction transactionState] == SKPaymentTransactionStatePurchased) {
      [self transactionDidComplete:transaction];


    } else if ([transaction transactionState] == SKPaymentTransactionStateFailed) {
        [self transactionDidFail:transaction];

    } else if ([transaction transactionState] == SKPaymentTransactionStateRestored) {
        [self transactionDidRestore:transaction];

    } else {

        NSLog(@"Unhandled case: %@", transaction);

    }
}

我什至没有输入我的测试用户帐户密码就点击了购买按钮,我收到了这个错误:

Unhandled case: <SKPaymentTransaction: 0x25a9a0>

这意味着,我假设在我输入密码并点击确定进行购买之前调用了支付队列!

我在函数“transactionDidComplete、transactiondidFail、transactionDidRestore”中确实有下面的代码

 [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

最佳答案

你需要处理SKPaymentTransactionStatePurchasing

类似于:

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
  //NSLog(@"updatedTransactions %@",transactions);
  NSNumber *paymentOk = [NSNumber numberWithBool:NO];
  for(SKPaymentTransaction *t in transactions){
    //transaction failed
    if(t.transactionState == SKPaymentTransactionStateFailed){
      //[self doTransactionFailure:t.error.localizedDescription];
      [[SKPaymentQueue defaultQueue] finishTransaction:t];
      continue;
    }
    if(t.transactionState == SKPaymentTransactionStatePurchasing){
      continue;
    }
    //transaction type here is success or restored
    //extract the app object
    if([t.payment.productIdentifier caseInsensitiveCompare:self.inAppPurchaseIdentifier]== NSOrderedSame){
      NSLog(@"Got payment for %@",t.payment.productIdentifier);
      paymentOk = [NSNumber numberWithBool:YES];
    }
    [[SKPaymentQueue defaultQueue] finishTransaction:t];
  }
  if([paymentOk boolValue]==YES){
    [self.delegate didPurchaseWithIdentifier:self.inAppPurchaseIdentifier];
  }
  else{
    [self.delegate didFailPurchaseWithIdentifier:self.inAppPurchaseIdentifier andReason:@"Unknown"];
  }
}

关于ios - 应用内购买测试用户不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11961077/

相关文章:

ios - 无法使用新创建的沙盒测试器连接到 iTunes Store

iphone - Objective-C - SecItemAdd 有错误 :EXC_BAD_ACCESS (first time) and errSecDuplicateItem (second time)

ios - 自动将事件从 ChildViewController 传递到 parentViewController

ios - Swift - UICollectionViewLayout 中的minimumLineSpacing 调整行之间的间距

ios - 如何访问DJIGO App飞行计划日志文件

iphone - 如何反转 NSMutableArray 中的数据?

ios - 应用内购买/快速转换

ios - maskToBounds 与 ClipsToBounds

ios - 在 UITableViewDelegate 扩展中使用未解析的标识符

Android 应用内计费错误