paymentQueueRestoreCompletedTransactionsFinished:当它应该有事务时返回一个空队列

时间:2012-05-11 21:56:12

标签: objective-c ios storekit

这是我第一次使用Store Kit,在我尝试恢复购买之前,一切都很顺利。关于类似问题,我已经看到其他几个关于堆栈溢出的帖子,但我找不到适用于我的解决方案。

我的应用中有一个调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]的按钮。这又会触发SKPaymentTransactionObserver方法paymentQueueRestoreCompletedTransactionsFinished:。问题是paymentQueueRestoreCompletedTransactionsFinished:在返回的队列中没有任何事务。

如果我尝试购买,我会收到通知,表示我已经购买了。这告诉我商店知道我的测试Apple ID已经成功完成了之前尝试的购买。为什么paymentQueueRestoreCompletedTransactionsFinished:会在其队列中返回空事务集合?

有人提到沙盒行为不规律,但我需要在开始使用AppStore之前看到这个工作。

有什么想法吗?我错过了什么吗?

提前致谢。

4 个答案:

答案 0 :(得分:8)

您是否正在处理-paymentQueue:updatedTransactions:中的交易?此回调在paymentQueueRestoreCompletedTransactionsFinished:回调之前获取已恢复的事务。

您应该在-paymentQueue:updatedTransactions:内进行还原处理和处理。

答案 1 :(得分:7)

我认为这是沙盒App Store的一个错误。我的恢复不适用于我的测试帐户(在iOS 5.0时代创建)。在恢复过程中没有调用-paymentQueue:updatedTransactions:

正如 process255 的评论所示,我在iTunes Connect中创建了一个新的测试用户。使用新的测试帐户,一切正常!

答案 2 :(得分:0)

取决于产品类型哪些产品将排队等候:

-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

作为候补,请阅读收据:

[[NSBundle mainBundle] appStoreReceiptURL]

收据的唯一问题是它们存储在本地,但苹果不会让它挂起..当然,购买也会保存在苹果服务器上。通过以下方式刷新/加载收据:

    SKReceiptRefreshRequest *recreq = [[SKReceiptRefreshRequest alloc] init];
[recreq start];

答案 3 :(得分:0)

我遇到了同样的问题,但是我没有去创建新用户,而是去了Settings中的iTunes&Aoo Stores,退出了沙盒测试帐户,然后再次尝试。工作!