Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.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_Transactions_In App Purchase - Fatal编程技术网

iOS应用程序内未完成的购买

iOS应用程序内未完成的购买,ios,transactions,in-app-purchase,Ios,Transactions,In App Purchase,我已经在我的应用程序中为应用程序内购买实施了额外的收据验证(灵感来源于)。 因此,在我购买了SkPaymentTransactionStates之后,我执行此验证,成功后,我解锁游戏的新内容,最后,我在 [[SKPaymentQueue defaultQueue] finishTransaction:myTransaction]; 如果验证过程无法完成,例如由于internet连接失败或用户在验证过程中终止应用程序,会发生什么情况?在这种情况下,我不会解锁内容,也不会完成事务。我认为这很合乎逻

我已经在我的应用程序中为应用程序内购买实施了额外的收据验证(灵感来源于)。 因此,在我购买了SkPaymentTransactionStates之后,我执行此验证,成功后,我解锁游戏的新内容,最后,我在

[[SKPaymentQueue defaultQueue] finishTransaction:myTransaction];
如果验证过程无法完成,例如由于internet连接失败或用户在验证过程中终止应用程序,会发生什么情况?在这种情况下,我不会解锁内容,也不会完成事务。我认为这很合乎逻辑

但是,当我重新启动应用程序(已在“未完成交易”状态下终止)并尝试购买应用程序内的时,我陷入了SKPaymentTransactionStateFailed状态,transaction.error.code==SKErrorPaymentCancelled。 同时出现一个消息框,上面写着:

您已经购买了此项目,但尚未加载。点击“确定”立即加载

按“OK”后,我没有收到任何回调调用,因此我没有解锁内容

因此,我的问题是: 1) 将事务保留在未完成状态(如果无法验证)可以吗? 2) 我如何恢复它?也许我错过了一些伴随着“您已经购买了…”messagebox的回调

另外,我的应用程序内购买是“消耗品”。所以我不能用

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

好的,我解决了。最重要的事情是从应用程序代理,而不是从“购买UI屏幕”听取付款队列。换句话说,

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
一定在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
不在我的自定义购买屏幕的viewDidLoad中

这里可以找到很好的解释:

你们提供的消耗品是什么?