恢复事务不';t下载IAP IOS的内容

恢复事务不';t下载IAP IOS的内容,ios,storekit,in-app-purchase,Ios,Storekit,In App Purchase,从两天以来,我一直在努力解决这个问题。我已成功使用可下载内容实施应用内购买。但每当我删除应用程序并恢复购买时,恢复实际上并不下载内容。但如果我在restoreTransaction中添加下载代码,每次我删除并重新安装应用程序时,它都不会调用finish transaction,这会导致应用程序的行为异常(这是合理的)。感谢您的帮助!! 如果有人需要进一步解释,请告诉我。谢谢 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTrans

从两天以来,我一直在努力解决这个问题。我已成功使用可下载内容实施应用内购买。但每当我删除应用程序并恢复购买时,恢复实际上并不下载内容。但如果我在restoreTransaction中添加下载代码,每次我删除并重新安装应用程序时,它都不会调用finish transaction,这会导致应用程序的行为异常(这是合理的)。感谢您的帮助!! 如果有人需要进一步解释,请告诉我。谢谢

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
  {
   for (SKPaymentTransaction * transaction in transactions) {
    switch (transaction.transactionState)
    {
        case SKPaymentTransactionStatePurchased:

            if(transaction.downloads)
                [self download:transaction];
            else

               [self completeTransaction:transaction];

            break;

        case SKPaymentTransactionStateFailed:

            [self failedTransaction:transaction];
            break;

        case SKPaymentTransactionStateRestored:

            if(transaction.downloads)
               [self restoreDownload:transaction];
            else
               [self restoreTransaction:transaction];

        default:
            break;
    }
};
}


 -(void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads
{
 for (SKDownload *download in downloads)
  {
    switch (download.downloadState) {

        case SKDownloadStateActive:
            NSLog(@"Download progress = %f",
                  download.progress);
            NSLog(@"Download time = %f",
                  download.timeRemaining);
            break;
        case SKDownloadStateFinished:
        {

           NSLog(@"URL %@",download.contentURL);
          }

            break;
        default:
            break;
        }
    }
}


 - (void)completeTransaction:(SKPaymentTransaction *)transaction {
  NSLog(@"completeTransaction...");

  [self provideContentForProductIdentifier:transaction.payment.productIdentifier];

  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
   }


   - (void)restoreTransaction:(SKPaymentTransaction *)transaction {
      NSLog(@"restoreTransaction...");


   [self  provideContentForProductIdentifier:transaction.originalTransaction.payment.productIdentifier];

    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
   }

 - (void)restoreDownload:(SKPaymentTransaction *)transaction {
 NSLog(@"restoreDownload...");

  //[self validateReceiptForTransaction:transaction];
   [self provideContentForProductIdentifier:transaction.originalTransaction.payment.productIdentifier];

   [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];

  }

 - (void)download:(SKPaymentTransaction *)transaction {
NSLog(@"Download Content...");

[self provideContentForProductIdentifier:transaction.payment.productIdentifier];
[[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
//[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

}

最后,我在Stackoverflow聊天室的一个好人的帮助下找到了这个问题的解决方案。问题在于,每当paymentQueue回调调用RestoredDownload时,它都不会调用restoreTransaction来完成事务。所以,该事务始终处于挂起状态,在下载内容后从未完成。因此,每当我删除并重新安装应用程序时,它总是会转到paymentQueue回调,最终转到SKPaymentTransactionStateRestored以完成事务,但总是会首先遇到RestoredDownload。因此,关键是在下载后完成事务,现在我可以在SKDownloadStateFinished中完成:通过编写以下代码:[[SKPaymentQueue defaultQueue]finishTransaction:download.transaction];“。因此,现在下载后它将始终完成交易。如果有人对此有任何疑问,请告诉我。谢谢。我遇到了此问题。即使经过您的解释,我也不明白为什么未下载内容。因此,假设我们忘记完成交易。我们再次启动应用程序,它会检测到带有“还原”状态,然后遇到
startDownloads
调用。为什么不开始下载内容?