在iOS上,启动付款后,defaultQueue包含一个"虚拟"不包含transactionId的事务。交易完成(完成或失败)后,"虚拟" transaction被替换为包含实际transactionId的新事务。
但是,Mac版本的行为有所不同。在启动付款后,我看到updatedTransactions被调用两次,而defaultQueue包含两个" dummy"没有transactionId的交易。在事务完成(完成或失败)之后,第三个事务被添加到包含实际transactionId的队列中。当第一次在此事务上调用finishTransaction时,它通常会从队列中删除其中一个虚拟事务。我们运行的looper发现已完成的事务仍在队列中并处理它。第二次调用finishTransaction将其从队列中删除。此时,defaultQueue仍然包含" dummy"的一个实例。永远不会解决的交易,并且无限期地保持在SKPaymentTransactionStatePurchasing状态。
此行为不仅会导致内存泄漏,因为每次购买后队列会继续增长,这也会导致我们的游戏内购买处理程序被调用两次。
我只是在沙箱环境中对此进行了测试。
有没有人在Mac上遇到过类似的问题?