2011-04-29 52 views
1

未决的应用程序内购买交易如何调用处理在下次启动

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

如果之前接收的

更新的交易响应SKPaymentTransactionStatePurchased

和后实际入账的钱给了用户的iTunes帐户,该应用因来电或其他原因而被杀害。

不这样做不会让你在重新启动时解锁功能,并尝试重新购买会给这个错误“你已经购买了这个,但它没有被下载”,因为你没有完成交易,并失败解锁功能,因为该应用程序被杀害。但在这一点上,这笔钱是从用户的iTunes账户中扣除的。这一切都发生在实际借记资金之后,并且在您收到SKPaymentTransactionStatePurchased回复之前。在应用程序被杀之间。现在在这种情况下应该怎么做?

回答

0

事务队列一直保持活动状态直到您完成它,即使应用程序已被杀死,只要确保您在下次启动时保持观察队列。

请注意,即使多个事务已排队,您也可以区分它们,因为paymentQueue:updatedTransactions:为每个事务提供一个数组,并且您可以单独查询它们的状态。例如:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
    switch (transaction.transactionState) 
    { 
     case SKPaymentTransactionStatePurchasing: 
      // Purchasing... waiting... 
      break; 

     case SKPaymentTransactionStatePurchased: 
      // Complete transaction here 
      break; 

     case SKPaymentTransactionStateFailed: 
      // Handle failure and finish transaction here 
      break; 

     case SKPaymentTransactionStateRestored: 
      // Restore transaction 
      break; 
    } 
    } 
} 
+0

我不这么认为。如果您没有完成交易,您将会重新启动什么通知? – amateurcoder 2011-04-29 16:17:38

+0

是的,它仍然活跃,我发现了。但是,假设你在队列中有2,3个待处理的请求没有完成,现在当添加观察者后在重新启动时回复时,你如何知道ex的事务细节?这些未完成交易的产品标识符。我的意思是询问如何解释现在出现的响应,它是否有一些信息,或者我们是否需要在userdefaults中存储unfinishedrequests.productIdentifiers之类的东西,并在接收到此响应时处理它们? – amateurcoder 2011-04-30 06:12:13

+0

paymentQueue:updatedTransactions:为您提供一个包含所有未决事务的数组。看到我上面编辑的答案。 – 2011-04-30 06:19:48