【问题标题】:finishTransaction: isn't removing the transaction from queue...finishTransaction:没有从队列中删除事务...
【发布时间】:2011-07-28 15:35:52
【问题描述】:

我有几个非消耗性应用程序。

支付完成一次(正确:SKPaymentTransactionStatePurchased),然后正确完成(并完成)inApp 的下载,最后我调用

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

但是交易仍在队列中...为什么?他们不应该被删除吗?也没有调用以下内容:

- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions

我也尝试在我的 finishtransaction 方法中实现:

for (SKPaymentTransaction *aTransaction in [[SKPaymentQueue defaultQueue] transactions])
{
    [[SKPaymentQueue defaultQueue] finishTransaction:aTransaction];
}

(如果我试图完成的交易对象不是正确的,但这也无法删除交易 - 大多数时候,有时它确实会删除但行为不一致,我不能弄清楚为什么它们被删除了几次,它们实际上被删除了)

【问题讨论】:

    标签: iphone app-store in-app-purchase storekit


    【解决方案1】:

    根据您的问题,您似乎正在尝试在购买完成后下载某些内容。在这种情况下,您可能应该在下载开始之前调用 finishTransaction。

    【讨论】:

    • 这正是我的“解决方法”。或者这是正确的方法?文档说在产品交付给用户之后调用finishtransaction。不过,立即调用它对我来说效果更好
    • 您应该“记住”该产品已购买但尚未下载,然后调用完成交易。在后台线程上,下载尚未下载的任何已购买产品的内容。原因是,您的应用在下载第 5 个产品中的第 3 个时可能会关闭。恢复下载很重要,因为它与金融交易相关
    • @Mugunth 我正在使用您的 MSStoreKit,并且在设置标志的简单非消耗品上遇到了这个问题。 MSStoreKit 是否为事务未完成并从队列中删除的问题做出任何规定?我看到一个建议在调用 failedTransactions 时使用 dispatch_async,但我不确定这是否是可行的方法。我很乐意看到更新 MSStoreKit 来处理这个问题。
    • 这是错误的。 Apple 文档 (developer.apple.com/library/content/documentation/…) 明确指出您应该在下载相关产品后调用 finishTransaction
    • @xfze (and Mugunth) 获取所有交易的问题可能是因为this line in Apple's docs:“当没有观察者附加到时,此属性 [-transactions] 的值未定义付款队列。”
    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2023-03-25
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多