2012-06-07 164 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

對於遲到的答案感到抱歉,我知道你已經解決了你的問題,但我也有這個問題。我的解決方案是自動運行恢復購買方法,因爲這似乎工作。

謝謝