相关疑难解决方法(0)

事务在finishTransaction之后返回:已被调用

我正在使用应用程序内购买iPhone应用程序.我有一个充当SKProductsRequestDelegate和的类SKPaymentTransactionObserver,并且它在iTunes上当前发布的版本中都运行良好.

但是,在最近添加一个新的非消耗品并在Sandbox环境中进行测试之后,我现在遇到了一个奇怪的问题.每次我启动应用程序时,我昨天的购买重新出现在传递给我的交易列表中paymentQueue:updatedTransactions:,尽管事实上我已经打过电话[[SKPaymentQueue defaultQueue] finishTransaction:transaction](好几次).这是亡灵!

在我的paymentQueue:updatedTransactions:实施中,我有:

for (SKPaymentTransaction* transaction in transactions) 
    switch (transaction.transactionState)
    {
        case SKPaymentTransactionStatePurchased:
        case SKPaymentTransactionStateRestored:
        {
            ....
                DDLog(@"Transaction for %@ occurred originally on %@.", transaction.payment.productIdentifier, transaction.originalTransaction.transactionDate);
                ....
Run Code Online (Sandbox Code Playgroud)

然后我处理购买,下载用户内容,最后,在另一种方法中,执行以下操作:

for (SKPaymentTransaction* transaction in [[SKPaymentQueue defaultQueue] transactions])         
            if (([transaction.payment.productIdentifier isEqualToString:theParser.currentProductID]) &&
                 ((transaction.transactionState==SKPaymentTransactionStatePurchased) || (transaction.transactionState==SKPaymentTransactionStateRestored))
               )
            {
                DDLog(@"[[ Transaction will finish: product ID = %@; date = %@ ]]", transaction.payment.productIdentifier, transaction.transactionDate);
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            }
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到,为了简单起见,我并没有坚持原始的事务对象,并且稍后从调用中找到它相对容易[[SKPaymentQueue defaultQueue] transactions].无论如何,我确实看到了预期的输出; 交易已完成,并且与产品ID和原始交易日期完全匹配.但是,下次我运行应用程序时,整个事情重新开始!就像iTunes …

iphone in-app-purchase

23
推荐指数
3
解决办法
2万
查看次数

标签 统计

in-app-purchase ×1

iphone ×1