2016-12-14 110 views
0

我有适用于iOS的Xamarin应用,并通过应用内购买。在测试期间,我购买了一种消耗品但未完成转换(因错误而崩溃)。现在,如果我重新安装应用程序,它允许购买此产品,但当然会恢复它,并显示消息“产品已免费恢复”。iOS:先前购买的应用内商品在购买时恢复,但交易未更新

此行为是预期的,但队列侦听器的UpdatedTransactions未被触发。我可以直接通过StoreKit.SKPaymentQueue.DefaultQueue.Transactions检查队列,但我需要知道用户交互何时完成(用户在该消息对话框中按下确定)。但是没有听众的方法被解雇。 正如我从Apple文档了解到的,在此之后必须有事务更新。也许它在我尝试购买之前被解雇。但是,我应该在购买前手动检查队列吗?

回答

3

我不使用Xamarin,但StoreKit是iOS功能的基础,因此它不能在Xamarin中正常工作。该事件必须早先被解雇。只要添加事务观察者([[SKPaymentQueue defaultQueue] addTransactionObserver:self]),您将收到包含所有未决事务的更新回调。如果这是在应用程序启动(应该是)时完成的,那么当您到达购买屏幕时,您的交易将会更新。对我而言,这是IAP开发中最棘手的部分,因为您必须在应用程序启动时以及在您拥有它们的所有屏幕上处理它们,并且可以随时进行回调。

请注意,此待处理事务可能会在事务处理列表中出现多次(我主要使用非易耗品,因此每次重新启动应用程序时都会添加新事务,而不关闭所有待处理事务)。为此,我有一个组件在应用程序启动后立即添加为事务观察器,侦听更新的事务并将它们存储在实例变量中供以后使用。在开始新购买之前,我会检查是否存在具有相同产品ID的未决交易,并据此采取相应措施。

希望这会有所帮助。

+0

谢谢,我怀疑类似的东西。顺便说一下,你可以随时检查队列,所以你不必在app开始的时候这样做 - 至少在xamarin中SKPaymentQueue.DefaultQueue.Transactions总是可用的,所以不需要另外存储它们。 – Tertium

+0

我编辑了答案。确保重新阅读。对不起:) –

+0

我会重写代码,并稍后标记您的答案 – Tertium