2016-06-21 164 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