应用程序内购买交易未从交易队列中删除

时间:2017-02-07 05:44:49

标签: ios objective-c in-app-purchase skpaymenttransaction

最近,我们在应用内购买(所有耗材产品)方面存在一些问题。 问题是即使在" 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;  
    }  
}; 

0 个答案:

没有答案