相同的应用程序,相同的测试用户,两个具有不同SKPaymentQueue内容的不同设备。什么可能导致这个?

时间:2011-08-09 02:33:06

标签: ios in-app-purchase

我有两部用于测试我的应用程序的iPhone。

在设备A上:

NSLog(@"Unfinished Transactions: [%i]", [[SKPaymentQueue defaultQueue].transactions count]);

哪些输出:“未完成交易:[0]”

当我做的时候:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]

功能

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

在Transactions数组中调用17个项目,每个项目都标记为RESTORED。所以,我循环遍历集合并在每个集合上调用[[SKPaymentQueue defaultQueue] finishTransaction: transaction]

处理完每个项目后,(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue被调用,[[queue transactions] count]等于4,而不是17,这是一个惊喜。

如果我在这个设备上重新运行[[SKPaymentQueue defaultQueue] restoreCompletedTransactions],我会反复得到相同的结果 - 尽管已经告诉每个事务我希望它从队列中删除,但更新的事务会被调用,需要处理17个项目。

在设备B上

$NSLog(@"Unfinished Transactions: [%i]", [[SKPaymentQueue defaultQueue].transactions count]);

仍然输出“未完成的交易:[0]”

当我跑步时

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]

,功能

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

永远不会被召唤。最终

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
使用

调用

[[queue transactions] count]

等于0.

可能导致这种情况的原因是什么?这几乎就像支付队列链接到设备ID,而不是测试帐户Apple ID。另外,请原谅这个问题的可怕格式,我还是习惯了StackOverflow。 :)

1 个答案:

答案 0 :(得分:3)

这是一个沙箱环​​境错误。

我遇到了完全相同的问题

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

从未被召唤过。调用paymentQueueRestoreCompletedTransactionsFinished后,只有restoreCompletedTransactions到达。

我已经和Apple工程师一起检查过了。他确认我的代码确实正确,我应该收到updatedTransactions电话。他说,沙盒环境中没有发生的事实显然是一个错误(他对此并不感到惊讶)。

老实说,你无能为力。在他确认我的代码是正确的之后我冒了风险并发布了应用程序。这一切都与真正的iTunes Connect服务器一样正常工作。

因此,您最好的(也许是唯一的)赌注是确保您按预期设置所有内容,然后继续对实时服务器进行测试。祝好运!它对我有用。