私の目的は、アプリがバックグラウンドにあるときにデータ/画像をサーバーに送信することです。iOS7 からは、バックグラウンド フェッチを使用してこれを行うことができます。ただし、バックグラウンド フェッチには 30 秒の時間制限しかありません。サーバーに送信するデータは、画像が多いため時間がかかる場合があります。グーグルで検索しているときに、バックグラウンドでデータを無制限にアップロード/ダウンロードできるバックグラウンド転送サービスに出会いました。バックグラウンド フェッチ コードでバックグラウンド転送サービスを開始することはできますか? その場合、どのように処理しますか。
質問する
475 次
1 に答える
0
アップロード/ダウンロードを開始したいときはいつでも(あなたの場合は30秒のバックグラウンドフェッチ中)、次の行を実行します。
NSString *downloadURLString = //Your link here;
NSURL* downloadURL = [NSURL URLWithString:downloadURLString];
NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL];
// Create a background session
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *identifier = @"com.yourcompany.yourapp";
NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];
session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
});
//Init a NSURLSessionDownloadTask with the just-created request and resume it
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request];
[task resume];
});
また、これらのデリゲート メソッドを実装することを忘れないでください。
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location;
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes;
詳細なサンプルについては、こちらのサンプル アプリをご覧ください
于 2015-12-14T14:47:52.100 に答える