我有一个适用于iOS的Xamarin应用,可以通过应用内购买。在测试期间,我购买了一个消耗品,但没有完成转换(出错时崩溃)。现在,如果我重新安装应用程序,它允许购买此产品,但当然要恢复它并显示消息"产品已免费恢复"。
此行为是预期的,但未触发队列侦听器的UpdatedTransactions。我可以通过StoreKit.SKPaymentQueue.DefaultQueue.Transactions直接检查队列,但我需要知道用户交互何时完成(用户在该消息对话框中按OK)。但是没有触发侦听器方法。 正如我从Apple文档中所理解的那样,必须有交易'在此之后更新。也许它在我尝试购买之前被解雇了。但是,我应该在购买之前手动检查队列吗?
答案 0 :(得分:3)
我没有使用Xamarin,但是StoreKit是iOS功能的底层,因此在Xamarin中无法正常工作。该事件必须提前解雇。一旦添加事务观察器([[SKPaymentQueue defaultQueue] addTransactionObserver:self]),您将收到包含所有挂起事务的更新回调。如果在启动应用程序时完成此操作(应该是),那么当您到达购买屏幕时,您将更新交易。对我来说,这是IAP开发中最棘手的部分,因为你必须在应用程序启动时以及在你拥有它们的所有屏幕中处理它们,并且回调可以随时发生。
请注意,此待处理交易可能会在交易清单上多次出现(我主要使用非消耗品,因此每次重新启动应用程序时都会添加新交易,而不会关闭所有待处理的交易)。为此,我在应用程序启动时将组件添加为事务观察器,侦听更新的事务并将它们存储在实例变量中供以后使用。在开始新购买之前,我会检查是否存在具有相同产品ID的待处理交易并采取相应行动。
希望这有帮助。