5

シナリオ:

ユーザーとして、アプリのドキュメント フォルダーに保存されている写真やビデオを (無制限に) 撮影できます。これらの各メディア ファイルは、追加情報 (キャプションなど) を含む Sqlite データベース内のレコードを取得します。これはすべて完全にオフラインで行うことができます。

オンラインに戻ると、撮影したすべてのビデオと写真のリストと、アップロード プロセスを開始するボタンが表示されたダイアログが表示されます。

各ファイルは、サーバーに対してマルチパート POST 要求を行うことにより、そのメタデータと共に次々とアップロードされます。サーバーの応答は、メタデータとともに Sqlite データベースに保存されます (そのため、失敗して忘れることはありません)。

信頼できるソリューション?

このチャートを正しく読んで理解している場合、最も簡単な解決策は、これらのアップロードのそれぞれをタスク内にラップすることです。副作用: 10 分後にすべてのタスクがキャンセルされ、接続が遅いか非常に大きなファイル (非常に長いビデオなど) が問題になります。

推奨される方法は、NSUrlSession/Background 転送サービスを使用することです。

それは私の質問に私を導きます:

マルチパート POST を NSURLSessionDataTasks でラップすることは可能ですか?タスクが 10 分以上実行されている場合や、ユーザーがアプリを一時停止している場合でも、これは信頼できますか?

私は Xamarin/C# 派なので、Objective-C であっても、マルチパート アップロードのサンプル スニペットをいくつか提供していただければ幸いです ;-)。

4

1 に答える 1

3

ほとんど... はい。

バックグラウンド転送サービスは、NSUrlSessionDownloadTaskおよびのみでNSUrlSessionUploadTask動作します。ここで説明されているように、s ではありません。NSUrlSessionDataTask

この「基本的な」制限を除けば、アップロード タスクでバックグラウンド転送サービスを使用しても安全です。

バックグラウンドでの 10 分間のフリーパスは、iOS 7 では適用されなくなりました (基本的にはありますが、異なります)。ただし、NSURLSessionバックグラウンド転送サービスを使用すると、必要ありません。

ダウンロード タスクに基づく、バックグラウンド転送サービスに関するブログ投稿をここに作成しました。

注意すべき重要なことは、タスクを開始するということは、基本的に、タスクが実際に開始され、別の時点で実際に終了することを意味するということです。これは、デバイスがセルラーまたは Wi-Fi のどちらに接続されているか、および (おそらく) iOS (および Apple) だけが知っているその他の要因によって異なります。

于 2013-10-31T17:42:29.160 に答える