-(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;
}
}
上面的代码用于跟踪我们知道的购买状态 . 但似乎代码不会跟踪“应用程序内购买已被购买”的事件 .
[[SKPaymentQueue defaultQueue] addPayment:payment];
每次我使用上面的代码购买已购买的IAP时,IOS确认购买对话框将显示transactionState = SKPaymentTransactionStatePurchasing(输出为“transactionState = 0”) . 然后我购买该项目并且“已购买的应用内购买”对话框显示没有其他州代码输出 .
我想赶上上面的事件 . 我打赌它一定是可以捕获的 . 该活动是否被扔到其他地方?
2 回答
在我的情况下,问题是由于
SKPaymentTransactionObserver
在另一个库已经注册了自己的观察者后添加到SKPaymentQueue
引起的 . 切换初始化的顺序,以便我的应用程序注册自己的观察者首先解决了问题 .I've provided in more detail here
当我们的服务器收据验证停止工作且交易没有修改购买流程时,我们遇到了类似的问题 . 在应用程序添加新产品付款之前,应用程序会立即迭代所有未结交易(
[SKPaymentQueue defaultQueue].transactions
),并在未结交易具有与新产品付款相同的产品标识符时停止付款 .