这是我第一次使用Store Kit,在我尝试恢复购买之前,一切都很顺利。关于类似问题,我已经看到其他几个关于堆栈溢出的帖子,但我找不到适用于我的解决方案。
我的应用中有一个调用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
的按钮。这又会触发SKPaymentTransactionObserver
方法paymentQueueRestoreCompletedTransactionsFinished:
。问题是paymentQueueRestoreCompletedTransactionsFinished:
在返回的队列中没有任何事务。
如果我尝试购买,我会收到通知,表示我已经购买了。这告诉我商店知道我的测试Apple ID已经成功完成了之前尝试的购买。为什么paymentQueueRestoreCompletedTransactionsFinished:
会在其队列中返回空事务集合?
有人提到沙盒行为不规律,但我需要在开始使用AppStore之前看到这个工作。
有什么想法吗?我错过了什么吗?
提前致谢。
答案 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,退出了沙盒测试帐户,然后再次尝试。工作!