2012-06-07 121 views
1

我正在构建iOS应用并尝试实施应用内购买(非消费品)。告知“已购买商品”消息后,应用内购买失败

所有的软件包ID等都已设置并正常运行,并且我可以在我获取Apple Store服务器时看到我的产品有效。但是,在测试时,我在paymentQueue回调中遇到了失败的事务。

这里是在iPhone模拟器一步一步发生了什么:“你想购买.. $ 0.99”

  1. 一个消息框,询问这是正确的
  2. 我点击是。
  3. 大约一秒钟后,它说我已经买了它(正确的,我测试 - 最初在调试时购买它)。我点击确定。
  4. 它抱怨登录要求(它说像MZFinance_LoginRequired,我认为它是一个缺少的字符串标识符。)我点击确定。
  5. App Store登录框弹出,我输入我的测试帐户凭证。
  6. 我的Xcode断点被击中,交易状态为SKPaymentTransactionStateFailed

这里是我的代码的相关部分:

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 
NSArray* arr = response.products; 
for (int i = 0; i < arr.count; i++) { 
    SKProduct* product = [arr objectAtIndex:i]; 
    if([product.productIdentifier isEqualToString:@"<<my in app purchase id which is correct and working>>"]){ 
     SKPayment *payment = [SKPayment paymentWithProduct:product]; 
     [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
     [[SKPaymentQueue defaultQueue] addPayment:payment]; 
    } 
} 

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{ 
for (SKPaymentTransaction* ta in transactions) { 
    switch (ta.transactionState) { 
     case SKPaymentTransactionStatePurchased: 
     case SKPaymentTransactionStateRestored: 
      receipt = [ta transactionReceipt]; 
      [self performSelectorInBackground:@selector(validateFromServer) withObject:nil]; 
      break; 
     case SKPaymentTransactionStateFailed: 
      [self purchaseFailed]; 
      break; 
    } 

    if(!ta.transactionState == SKPaymentTransactionStatePurchasing){ 
     [[SKPaymentQueue defaultQueue] finishTransaction:ta]; 

    } 
} 

}}

[self purchaseFailed]总是被击中,其中只是通知用户。这里有什么可能是错的? (我是iOS新手,很明显 - iOS在购买应用程序)。 谢谢。

更新:我的测试帐户凭据是正确的,因为如果我输入了错误信息,我将收到一条不同的(无效登录)消息。

回答

0

经过一段时间的努力,我发现我没有遇到生产中的任何问题。这可能是沙盒服务器的问题。

1

对于迟到的答案感到抱歉,我知道你已经解决了你的问题,但我也有这个问题。我的解决方案是自动运行恢复购买方法,因为这似乎工作。

谢谢