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

Sco*_*Coy 5 in-app-purchase ios

我有两个用于测试我的应用程序的iPhone.

在设备A上:

NSLog(@"Unfinished Transactions: [%i]", [[SKPaymentQueue defaultQueue].transactions count]);
Run Code Online (Sandbox Code Playgroud)

哪个输出:"未完成的交易:[0]"

当我做的时候:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
Run Code Online (Sandbox Code Playgroud)

功能

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
Run Code Online (Sandbox Code Playgroud)

在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]);
Run Code Online (Sandbox Code Playgroud)

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

我跑的时候

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
Run Code Online (Sandbox Code Playgroud)

, 功能

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
Run Code Online (Sandbox Code Playgroud)

永远不会被召唤.终于

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
Run Code Online (Sandbox Code Playgroud)

被称为

[[queue transactions] count]
Run Code Online (Sandbox Code Playgroud)

等于0.

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

Zde*_*nek 3

这是一个沙箱环​​境错误。我遇到了完全相同的问题

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

从未被调用过。只有paymentQueueRestoreCompletedTransactionsFinished在致电后才到达restoreCompletedTransactions

我已经和苹果工程师核实过了。他确认我的代码确实正确,我应该接到电话updatedTransactions。他说,在沙箱环境中没有发生这种情况显然是一个错误(他对此一点也不感到惊讶)。

老实说,你对此无能为力。在他确认我的代码正确后,我冒险发布了该应用程序。在真正的 iTunes Connect 服务器上,一切都按预期工作。

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