Iphone 在下次发布时处理未决的应用程序内购买交易

Iphone 在下次发布时处理未决的应用程序内购买交易,iphone,ios4,in-app-purchase,Iphone,Ios4,In App Purchase,如何打电话 [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 如果在收到更新的交易响应之前 SKPaymentTransactionStates已购买 在将钱记入用户的itunes帐户后,该应用程序会因来电或其他原因而被终止 不这样做不会让你在重新启动时解锁功能,并且尝试重新购买时会出现此错误“你已经购买了此功能,但尚未下载”,因为你没有完成交易,并且由于应用程序被终止而未能解锁功能。但在这一点上,这笔钱是从用户的i

如何打电话

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
如果在收到更新的交易响应之前

SKPaymentTransactionStates已购买

在将钱记入用户的itunes帐户后,该应用程序会因来电或其他原因而被终止


不这样做不会让你在重新启动时解锁功能,并且尝试重新购买时会出现此错误“你已经购买了此功能,但尚未下载”,因为你没有完成交易,并且由于应用程序被终止而未能解锁功能。但在这一点上,这笔钱是从用户的itunes帐户中扣除的。这一切都发生在实际借记款项之后,在您收到SKPaymentTransactionStatePurchased的回复之前。在两者之间,应用程序被杀死。现在,在这种情况下该怎么办?

事务队列将保持活动状态,直到您完成它(即使应用程序被终止),只要确保您在下次启动时继续观察队列即可


请注意,即使多个事务排队,也可以在中区分它们,因为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;
    }
  }
}

我不这么认为。如果您没有完成交易,重新启动时会收到什么通知?是的,我发现它仍然处于活动状态。但假设队列中有2,3个未完成的挂起请求,现在当添加观察者后重新启动响应时,您如何知道这些未完成事务的ex.product identifier的事务详细信息。我想问的是,如何解释现在出现的这个响应,它是否有一些信息,或者我们是否需要在userdefaults中存储未完成的requests.productIdentifiers之类的内容,并在收到此响应时进行处理?paymentQueue:updatedTransactions:提供一个包含所有挂起事务的数组。请参阅上面我编辑的答案。当我收到回复时,我会进入这个区块SKPaymentTransactionStatePurchased:这真的很好。但是从这里,我无法提取特定于事务的信息,如NSString*productIdentifier=transaction.originalTransaction.payment.productIdentifier;基于此,我可以解锁相应的功能。我的productIdentifier字符串始终为0x0(nil)。