0

私たちは iPhone アプリを作成していますが、バックグラウンドでのアプリ内購入のダウンロードに問題があり、誰かが解決策を持っているかどうか疑問に思っていました...

私たちのアプリ内購入は 35 ~ 40 MB と非常に大きく、各購入はそれぞれ 7 ~ 8 MB の 5 つのアイテムで構成されるため、通常、電話はスタンバイ状態になるか、ユーザーは購入がダウンロードされる前にアプリを切り替えるため、アプリ内購入がダウンロードされることが不可欠です。バックグラウンドでシームレスに。

購入をダウンロードするとき、サーバーから約 35 ~ 40 MB をダウンロードし、同時にアプリ内のローカル sqlite データベースを更新する必要があります。フォアグラウンドでアイテムをダウンロードして正常に動作することをテストしました。また、バックグラウンドでダウンロード プロセスを継続するためにいくつかの処理を行いました。ダウンロードは継続されており、デバッガーで動作していることを確認できます。

ただし、次の問題があります...</p>

ユーザーがダウンロードを開始する アプリのダウンロード ページにアプリがダウンロード中であることが表示される ユーザーがアプリを離れるか、電話がスタンバイになる ユーザーがアプリに戻る

この時点で、アプリのスプラッシュ画面が読み込まれ、8 MB のダウンロードの 1 つが完了するまで画面に表示されたままになります。完了すると、アプリのダウンロード ページに切り替わります。ユーザーはアプリがクラッシュしたと考えているため、これは非常に混乱を招きます。

では、ユーザーがダウンロードを押すとバック​​グラウンドでダウンロードが開始され、ダウンロードの進行中にアプリが通常どおりに動作するように、アプリ内購入を管理するにはどうすればよいでしょうか? したがって、ユーザーがアプリを離れて戻ったときに、ダウンロードの進行状況を示す正しいページが表示されます。ユーザーはアプリ内を移動し、正常に動作します。

いくつかの観察...

各アプリ内購入には 5 つのアイテムがあるため、ダウンロードを実行するには NSURLConnection を 5 回連続して実行する必要があります。

私が気づいたことは、最初のダウンロードが進行中の場合、ユーザーがホームボタンを押しても「didEnterBackground」メソッドが呼び出されず、最初のダウンロードプロセスが完了した後に「didEnterBackground」メソッドが呼び出されることです。また、ユーザーがアプリをバックグラウンドに入れてからフォアグラウンドに戻ると、「didEnterForeground」が呼び出されるはずですが、そうではありません。

「MainThread」とは別のスレッドを使用してデータをダウンロードしていますが、同じ問題で実行されています。

どんな助けでも大歓迎です。

4

2 に答える 2

0

見てみてください... 新しい AFNetworking の拡張機能AFDownloadRequestOperation

このクラスには、部分的なダウンロードを再開するための追加のサポートがあり、一時ディレクトリを使用し、正しいダウンロードの進行状況を計算するのに役立つ特別なブロックがあります。

「shouldResume を YES に設定することを忘れないでください」:)

AFDownloadRequestOperation については、このAFNetworking がダウンロードを再開しないことも確認できます

UPD

最悪の場合..試してみる"Task Completion for Long-Running Tasks""Task-Specific Background Processing"、バックグラウンドで.. http://www.codeproject.com/Articles/124159/Hour-21-Building-Background-Aware-Applications

于 2013-01-22T22:57:41.020 に答える
0
  • 多くの人が使用し、別のスレッドにロードされるAFNetworkingを見てください。readmeには、file-download-with-progress の例があります。
  • ダウンロード中に iOS がスタンバイ モードになるのを防ぐことができます。

    [UIApplication sharedApplication].idleTimerDisabled = YES;
    
于 2013-01-18T13:59:56.267 に答える