私は2日からこの問題に苦労しています。ダウンロード可能なコンテンツでアプリ内購入を正常に実装しました。しかし、アプリを削除して購入を復元するたびに、復元は実際にはコンテンツをダウンロードしません。しかし、restoreTransaction にダウンロード コードを追加すると、アプリを削除して再インストールするたびに、アプリが奇妙な動作をする原因となる終了トランザクションが呼び出されることはありません (これは妥当です)。どんな助けでも大歓迎です!! さらに説明が必要な場合はお知らせください。ありがとう!!
- (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];
}