2016-06-21 207 views
2
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{ 
for (SKPaymentTransaction* transaction in transactions) 
{ 
    CCLOG("transactionState = %ld", transaction.transactionState); 
    switch (transaction.transactionState) 
    { 
     case SKPaymentTransactionStatePurchased: 
      [self completeTransaction:transaction]; 
      break; 
     case SKPaymentTransactionStateFailed: 
      [self failedTransaction:transaction]; 
      break; 
     case SKPaymentTransactionStateRestored: 
      [self completeTransaction:transaction]; 
      break; 
     default: 
      break; 
    } 
} 

上面的代碼用於跟蹤我們所知道的購買狀態。 但似乎代碼不會跟蹤「應用內購買已被購買」事件。Catch「應用程序內購買已被購買」事件

[[SKPaymentQueue defaultQueue] addPayment:payment]; 

每次我使用上述代碼購買其已經購買了IAP,IOS的確認購買對話框顯示出與transactionState = SKPaymentTransactionStatePurchasing(輸出爲「transactionState = 0」)。然後我購買該項目並顯示「已購買應用程序內購買」對話框,並且不顯示其他狀態代碼輸出。

我想趕上上述事件。我敢打賭它一定是可捕捉的。活動是否在其他地方投擲?

+0

您是否設法使其工作?當爲已購買的物品調用addPayment時,我遇到了類似的問題,並返回無回叫事件 –

+0

不,經過長時間的解決方案找到沒有結果後。我在我的應用程序中添加一些鎖以避免這種情況。 – ZeroZerg

+0

你添加了什麼樣的鎖? – keyboard

回答

0

在我的情況下,問題是由於在另一個庫已經註冊了自己的觀察者之後將SKPaymentTransactionObserver添加到SKPaymentQueue引起的。切換初始化順序,以便我的應用程序先註冊自己的觀察者,然後解決問題。

I've provided in more detail here