最近,我们在应用内购买(所有耗材产品)方面存在一些问题。 问题是即使在" finishTransaction:transaction"之后,某些用户的某些事务也没有从事务队列中删除。曾打来电话。 正在我们的服务器上检查收据。可悲的是,有时候我们一直在收到有旧交易信息的收据。正如您看到下面的代码," finishTransaction"在checkReceipt之前调用方法。但是" finishTransaction"方法对某些用户不起作用,一些已经处理的事务在无限期内保留在事务队列中,之后每次他/她购买产品,然后checkReceipt方法被调用2次。 1表示新交易,1表示已完成的交易(我们检查了交易的收据,并已向用户提供了相应的项目)。但是事务在无限期内保留在事务队列中并随机从队列中删除。 我们知道" finishTransaction"收货检查后应调用方法。但在我们的应用程序中现在" finishTransaction"方法是在" checkReceipt"之前故意调用的。因为已处理的交易没有停止来。感谢上帝,我们的大多数用户'收据可以检查。
当我们用Apple服务器检查收据时,有时我们会收到空的in_app数组的收据响应。有些用户通过电子邮件向我们发送了他们的信用卡已收费,但无法获得门票(我们的iAP产品),因为我们无法接受带有空in_app阵列的收据。
最后,昨天我们的一位用户遇到了一个奇怪的问题。根据我们的访问日志,他得到了" SKErrorPaymentCancelled"当他被要求购买门票时错误代码?"由于我们昨天发布的App更新。但是" checkReceipt"之后调用方法,然后将收据发送到我们的服务器并使用Apple服务器进行检查,似乎用户已收费。在" checkReceipt"之前方法,我们已经得到了" SKErrorPaymentCancelled"该交易的错误代码。
在应用更新期间失败的交易后,新交易是否会启动,例如" StoreKitFlow流程"?
请您告诉我为什么即使在" finishTransaction"之后也无法从交易队列中删除某些交易。方法叫做?
另外您知道在哪种情况下收到空的in_app数组并且收据(我们的应用程序是免费的,用户需要为iAP付费)?
for (SKPaymentTransaction * transaction in transactions) {
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:{
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
[self checkReceipt:transaction];
break;
}
case SKPaymentTransactionStateFailed:
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateDeferred:
// Remove purchase screen
[[NSNotificationCenter defaultCenter] postNotificationName:@"purchaseStatus" object:@"deferredTransaction"];
break;
default:
break;
}
};