サンドボックスでテストしたいアプリ内購入があるという問題があります。アプリ内購入のステータスは「送信準備完了」で、手順に従って pkg ファイルをアプリ内購入にアップロードしました。
サンドボックスでのトランザクションは正常に機能しますが、ダウンロードに関しては、 - (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads デリゲート関数が 1 回だけ呼び出されます。そして、最初に「else if (download.downloadState == SKDownloadStateActive)」ブロックに入り、「Progress ... 0 ..」を出力します。
アプリ内購入は、ダウンロードが機能する前に Apple による「審査と承認」を受ける必要がありますか? 他に何がエラーになるでしょうか?
ありがとう。
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction * transaction in transactions) {
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
if (transaction.downloads) {
[[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
}
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
if (transaction.downloads) {
[[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads];
}
[self restoreTransaction:transaction];
default:
break;
}
};
}
- (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads;
{
for (SKDownload *download in downloads) {
if (download.downloadState == SKDownloadStateFinished) {
[self processDownload:download]; // not written yet
// now we're done
[queue finishTransaction:download.transaction];
} else if (download.downloadState == SKDownloadStateActive) {
NSString *productID = download.contentIdentifier; // in app purchase identifier
NSTimeInterval remaining = download.timeRemaining; // secs
float progress = download.progress; // 0.0 -> 1.0
NSLog(@"Downloading %@", productID);
NSLog(@"progress... %f time remaining %f", progress, remaining);
// NOT SHOWN: use the productID to notify your model of download progress...
} else { // waiting, paused, failed, cancelled
NSLog(@"Warn: not handled: %d", download.downloadState);
}
}
}