現在、写真とビデオのセットを S3 アマゾン サーバーに送信する必要があるプロジェクトに取り組んでいます。流れは次のようになります。
-まず、API に転送を開始するように依頼し、ID を取得します (API 呼び出し)
-transfer id -> api でファイルのアップロードを要求 -> 応答として file_id (api 呼び出し)
-file id -> api でのチャンク アップロードのリクエスト -> 応答としての amazon データ (api 呼び出し)
-upload chunck -> backgroundConfiguration で構成された NSURLSession 内 (アップロードごとに 5 MB)
-最後のチャンク アップロード (API 呼び出し) の後にファイルのアップロードを終了する
-最後のファイルアップロード後に転送を終了する(API呼び出し)
アプリがバックグラウンドで実行されている場合も、API を使用して呼び出しを行う必要があります。
そこで私が考えたのは、バックグラウンドでファイルをアップロードして完了ブロックを実行できる AFNetworking 2.0 を使用することでした。
その完了ブロックでは、コードは次のようになります。
_managerBackground = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
- (void)uploadChunkInTheBackGround:(RequestChunkUploadResponse *)requestChunkUploadResponse
{
UploadChunkRequest *chunkUploadRequest = [[UploadChunkRequest alloc]initWithRequestChunkUploadResponse:requestChunkUploadResponse];
APIService *weakSelf = (APIService *)self;
NSURLSessionUploadTask *uploadTask = [_managerBackground uploadTaskWithRequest:chunkUploadRequest.request fromFile:chunkUploadRequest.fileLocationURL progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//code to prepare recursive upload and files
[weakSelf uploadChunkInTheBackGround:chunkUploadResponse];
}];
難しいのは、コードを実行したり、iOS7 のバックグラウンドでアップロード タスクを実行したりすることです。
アプリがデバッガー (Xcode) に接続されている場合、上記のサンプルが機能します。ただし、コンソールに次のエラーが表示されます。
<BKProcessAssertion: 0x178468380> identifier: com.apple.nsnetworkd.handlesession process: YourApp[675] permittedBackgroundDuration: 30.000000 reason: backgroundDownload owner pid:111 preventSuspend preventThrottleDownUI preventIdleSleep preventSuspendOnSleep
だからそれはクールではありません:(
コードを実行し、バックグラウンドでファイルをアップロードする方法はありますか..?? これについて何か経験はありますか?? それともiOS7の多くにお願いするのでしょうか??
あなたの考えを共有できることを願っています。
ありがとう、
敬具、
バート・スクーン