Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:以前购买的应用内产品在购买时会恢复,但交易不会更新_Ios_Xamarin.ios_In App Purchase - Fatal编程技术网

iOS:以前购买的应用内产品在购买时会恢复,但交易不会更新

iOS:以前购买的应用内产品在购买时会恢复,但交易不会更新,ios,xamarin.ios,in-app-purchase,Ios,Xamarin.ios,In App Purchase,我有一个用于iOS的Xamarin应用程序,可以在应用程序内购买。在测试过程中,我购买了一个消耗品,但没有完成转换(出错时崩溃)。现在,如果我重新安装应用程序,它允许购买此产品,但当然会将其还原,并显示消息“该产品已免费还原” 此行为是预期的,但未激发队列侦听器的UpdatedTransactions。我可以通过StoreKit.SKPaymentQueue.DefaultQueue.Transactions直接检查队列,但我需要知道用户交互何时完成(用户在该消息对话框中按OK)。但是没有启动侦

我有一个用于iOS的Xamarin应用程序,可以在应用程序内购买。在测试过程中,我购买了一个消耗品,但没有完成转换(出错时崩溃)。现在,如果我重新安装应用程序,它允许购买此产品,但当然会将其还原,并显示消息“该产品已免费还原”

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

我没有使用Xamarin,但是StoreKit是iOS功能的基础,因此它不能在Xamarin中工作。事件必须提前触发。一旦添加事务观察者([[SKPaymentQueue defaultQueue]addTransactionObserver:self]),您将收到所有挂起事务的更新回调。如果这是在应用程序启动时完成的(应该是),当您到达购买屏幕时,您将更新交易。对我来说,这是IAP开发中最棘手的部分,因为您必须在应用程序启动时以及在所有屏幕上处理它们,并且回调可以随时发生

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


希望这能有所帮助。

我没有使用Xamarin,但StoreKit是iOS功能的基础,因此它不能在Xamarin中工作。事件必须提前触发。一旦添加事务观察者([[SKPaymentQueue defaultQueue]addTransactionObserver:self]),您将收到所有挂起事务的更新回调。如果这是在应用程序启动时完成的(应该是),当您到达购买屏幕时,您将更新交易。对我来说,这是IAP开发中最棘手的部分,因为您必须在应用程序启动时以及在所有屏幕上处理它们,并且回调可以随时发生

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


希望这能有所帮助。

谢谢,我怀疑类似的事情。顺便说一句,您可以随时检查队列,所以您不必在应用程序启动时执行此操作-至少在xamarin SKPaymentQueue.DefaultQueue.Transactions中是始终可用的,因此不需要另外存储它们。这是事实,它在iOS中也是可用的。我将对其进行预处理,通过删除同一事务的可能重复项(基于原始事务id和事务id),使待处理事务的列表尽可能短,这还允许标记所有已完成的事务,而不会在将来再次出现。但是,是的,没有必要存储该列表。谢谢,我怀疑类似的情况。顺便说一句,您可以随时检查队列,所以您不必在应用程序启动时执行此操作-至少在xamarin SKPaymentQueue.DefaultQueue.Transactions中是始终可用的,因此不需要另外存储它们。这是事实,它在iOS中也是可用的。我将对其进行预处理,通过删除同一事务的可能重复项(基于原始事务id和事务id),使待处理事务的列表尽可能短,这还允许标记所有已完成的事务,而不会在将来再次出现。但是,存储该列表是不必要的。