0

Apple サーバーでホストされているコンテンツをダウンロードして動作させましたが、IAP UI をさらに開発しているときに、コンテンツを再ダウンロードする必要がある状況に遭遇しました。

この場合のコンテンツは、Xcode でイメージのバンドルとして作成された zip ファイルと、関連データを含む plist ファイルです。

元のダウンロードは正常に機能し、zip ファイルをディレクトリのように処理できました。

アプリの開発を続けるにあたり、テスト デバイスからアプリを削除しました。つまり、コンテンツはデバイス上にありませんでした。アプリ内トランザクションが完了しなかったため、ダウンロードが再度処理されることを期待していました。

元々、zip ファイルがダウンロードされて caches ディレクトリに保存され、そこから処理することができました。ただし、IAP フレームワークは zip ファイルが存在すると認識しているように見えますが、実際には存在しません。このメソッドは、ダウンロード アクティビティが発生していない場合paymentQueue:updatedDownloads:と等しいダウンロード状態でトリガーされます。SKDownloadStateFinishedわかった。それは私の管理下にありません。与えられたダウンロードの URL を確認するだけで済みますよね? そのため、参照されたダウンロードを処理するcase SKDownloadStateFinished:への呼び出しがあります。[self processURL:download.contentURL fromProduct:download.contentIdentifier];その方法の始まりは次のとおりです。

-(void)processURL:(NSURL *)directoryURL fromProduct:(NSString *)productIdentifier
{
   int itemsAdded = 0;
   NSFileManager *filemanager = [NSFileManager defaultManager];
   NSMutableSet *masterIndex = [NSMutableSet new];
   BOOL isDir;
   if ([filemanager fileExistsAtPath:[directoryURL path] isDirectory:&isDir]) {
      NSLog(@"URL %@ exists. Is it a directory? %@",directoryURL,isDir?@"YES":@"NO");
   } else {
      NSLog(@"URL %@ does not exist.",directoryURL);
   }

出力として得られるものは次のとおりです。

URL file://localhost/private/var/mobile/Applications/40733984-E18D-4450-A98E-D8CCC56D2600/Library/Caches/8E29E63C-9C32-4D92-AC84-23BDA946DE5F.zip/ does not exist.

への呼び出し[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];は役に立たないようです。zipファイルを再ダウンロードせずに終了したと考えているだけです。

何をすべきかについて何か提案はありますか?

編集:これは本当にイライラしています。最初の投稿以来、私は次のことを試しました: * iPad を再起動しました * Xcode を再起動しました * iPad でクリーンアップを実行しました (息を止めていませんでした。クリーニング ユーティリティ) * plist ファイル内の更新された情報でアプリ内購入パッケージを更新しました。* アプリ内購入パッケージのバージョンを更新しました。

ダウンロードしようとすると、同じ zip ファイル名をダウンロードしようとしますが、まだ存在しません。パッケージを変更すると、同じパッケージ名であっても、ダウンロードによって別の zip 名がプルされると考えました。しかし、おそらくそれは単なるハッシュまたはパッケージ名です。

キャッシュ ディレクトリが何らかの理由で破損している可能性があります。次のステップは、別のパッケージ名で別のパッケージを作成することです。これでうまくいくと思いますが、問題は解決しません。

また、問題を引き起こした可能性のある状況についても考えています。ビルドと実行ボタンを押したときの Xcode 5 の応答が遅いようです。その結果、2回クリックしました。もちろん、それは問題を引き起こします。この場合、ある種の致命的な抱擁を受けて、iPad がロックされたと思います。手動で電源を切って再起動する必要がありましたが、正常に戻るまでに 2 回かかりました。

編集:新しいアイテムはダウンロードされていません。私がチェックした項目のチェックリストです。これを編集して、さらに多くのアイテムを含めるかどうかを確認してください。

  • テスト ユーザーが本番環境で使用されていないことを確認してください。その場合、新しいテスト ユーザーを作成する必要があります。
  • オブジェクトが SKPaymentTransactionObserver として登録されていることを確認します。これには、インターフェイスの設定と[[SKPaymentQueue defaultQueue] addTransactionObserver:self]、起動時の呼び出しも含まれます。
  • ユーザーが支払いを行えることを確認します。
  • 確認してくださいtransaction.transactionState == SKPaymentTransactionStatePurchased(またはSKPaymentTransactionStateRestoredトランザクションを復元する場合)
  • トランザクションが終了していないことを確認してください ( [[SKPaymentQueue defaultQueue] finishTransaction:transaction])。
  • 製品 ID が iTunes Connect で設定された製品 ID と一致していることを確認してください (そうでなければ、購入できなかったでしょう)。
  • 物理デバイスでテストします。これらのダウンロードは、シミュレーターでテストできません。
  • (推測) App Store の通知をオフにして、テスト ユーザーが無効にならないようにします。
4

1 に答える 1