【问题标题】:In-App Purchases test user doesn't work应用内购买测试用户不起作用
【发布时间】:2012-08-14 21:33:16
【问题描述】:

我在让应用内购买生效时遇到问题。每次我创建一个新的测试用户并在我的 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];

【问题讨论】:

  • 这可能是因为我启用了 ARC 吗?
  • 猜不出来。我在文件中添加了 -fno-objc-arc ,但我仍然遇到同样的问题。
  • 第一次购买时,我仍在尝试了解如何在新的测试用户帐户上交易失败。给出错误“您已经购买了这个,但尚未下载。”
  • 好吧,当我按下购买按钮时,我发现至少最初的未处理案例是因为当交易状态为 SKPaymentTransactionStatePurchasing 时我没有执行任何操作。
  • 这听起来可能很愚蠢,但我在我的帐户而不是我的工作帐户下创建了测试用户帐户,因为我不想弄乱他们的测试用户页面。现在我意识到你不能在另一个所有者的应用程序上使用另一个开发者的测试用户帐户。 :-/ (已解决)

标签: ios xcode in-app-purchase


【解决方案1】:

您需要处理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"];
  }
}

【讨论】:

  • 我试过你的方法,即使是新的测试用户。输入初始购买密码后,我仍然得到相同的结果。你已经购买了这个,但还没有下载。”
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多