1

私の目的は、アプリがバックグラウンドにあるときにデータ/画像をサーバーに送信することです。iOS7 からは、バックグラウンド フェッチを使用してこれを行うことができます。ただし、バックグラウンド フェッチには 30 秒の時間制限しかありません。サーバーに送信するデータは、画像が多いため時間がかかる場合があります。グーグルで検索しているときに、バックグラウンドでデータを無制限にアップロード/ダウンロードできるバックグラウンド転送サービスに出会いました。バックグラウンド フェッチ コードでバックグラウンド転送サービスを開始することはできますか? その場合、どのように処理しますか。

4

1 に答える 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 に答える