4

私のアプリでは、アプリがアクティブな場合、Apple でホストされているコンテンツのダウンロードはうまくいきます。ただし、バックグラウンドに移行して十分な時間が経過すると、再びアクティブになったときにSKDownloadまだactive状態がありますが、進行状況は報告されていません。取引がまだ完了していないことを確認しました。

なぜこれが起こるのか誰にも分かりますか?私のデバイスは Wi-Fi に接続されSKDownloadており、インスタンス変数に保存したため、ダウンロードの状態を確認できました。したがって、バックグラウンドでダウンロードの進行状況を受信できないという問題だけであれば、現在の値を から読み取ることができますmyDownload.progress。ただし、進行状況はまったく同じであり、更新されていません。

上記のようにSKDownload変数に保存するので、これは私にとって大きな問題です。重複したダウンロードが開始されるのを防ぐためにそうしています。私のアセットは 150MB を超えているため、ユーザーはアセットのダウンロードにかかる時間を認識せず、アイテムを再度復元/「購入」して 2 回目のダウンロードを開始しようとする可能性があります。そのため、実行中のダウンロードを変数に保存し、新しいトランザクションが完了すると、ダウンロードが既に実行されているかどうかを確認します。ダウンロードが最短時間で完了することを保証する優れた設計です。唯一の問題は、アプリが長時間バックグラウンドにあり、次の状態になった場合に発生します。

  1. アクティブなレポートをダウンロード
  2. 対応するトランザクションはまだ終了していません
  3. なぜかダウンロードが進まない

上記のセーフガードを考えると、ダウンロードが実行されておらず、アプリが重複したアクティブなダウンロードを認識しているため、新しいダウンロードが開始されないため、問題は明らかです。

ダウンロードを再開しようとしましたが、何もしません (状態が一時停止されていないためだと思います)。

更新 1

この問題を解決する方法を見つけましたが、私にはハックのように見えます:

  1. アプリがバックグラウンドになったらダウンロードを一時停止する
  2. ストア トランザクション オブザーバーを再度 (!!!) に追加しapplicationWillEnterForegroundます。
  3. 一時停止したダウンロードを再開する

2が一番面白い。すべてのストア関連の通知を処理するシングルトンがあります。でトランザクション オブザーバーとして追加し、didFinishLaunchingWithOptionsでのみ削除しwillTerminateます。アプリがフォアグラウンド状態になった後、シングルトンが同じであることを確認しました。それでも、ストア オブザーバーとして再度追加しない限り、ダウンロードの再開は見られません。超面白い。

4

0 に答える 0