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