ios扩展使用NSURLSession下载后上传会延迟

时间:2015-01-20 07:05:45

标签: ios upload download nsurlsession ios8-share-extension

我想上传在共享扩展程序中从服务器下载的数据,但上传任务已延迟,我将在下次推送共享扩展程序中的发布按钮时继续。我在Document中发现此消息描述为“自由裁量”,这是否表示当APP处于后台状态时启动上传任务,因此系统可能会延迟上传。

  

对于在您的应用处于后台时启动的转移,系统始终自行开始转移 - 换句话说,系统假定此属性为YES并忽略您指定的任何值。

以下是代码:

- (void)didSelectPost {
        NSURLSession *session = [self configureSession];
        NSString *downLoadStr = [NSString stringWithFormat:@"https://apis.live.net/v5.0/%@/content?access_token=%@", [shareProfile objectForKey:@“PATH”], accesToken];
        mDownloadTask = [session downloadTaskWithURL:downUrl];
        [mDownloadTask resume];
        [self.extensionContext completeRequestReturningItems:[self.extensionContext inputItems] completionHandler:nil];
}


- (NSURLSession *) configureSession {

    static NSURLSession *session = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.test.background_shareext"];
                // To access the shared container you set up, use the sharedContainerIdentifier property on your configuration object.
        config.sharedContainerIdentifier = @"group.test.background”;
        session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
    });
    return session;
}

- (void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    if (location != nil) {
        NSString *str = [NSString stringWithContentsOfFile:[location path] encoding:NSUTF8StringEncoding error:nil];
        char *utfString = [[@"" stringByAppendingFormat:@"%@\n%@\n", str, @"test"] UTF8String];
        NSData *uploadData = [NSData dataWithBytes:utfString length:strlen(utfString)];
       NSString *uploadUrlStr = [NSString stringWithFormat:@"https://apis.live.net/v5.0/%@/files/%@?suppress_response_codes=true&overwrite=true&access_token=%@", path, file, accesToken];
       NSURL                     *uploadUrl                  = [NSURL URLWithString:uploadUrlStr];
       NSMutableURLRequest *uploadReq = [NSMutableURLRequest requestWithURL:uploadUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:HTTP_REQUEST_TIMEOUT_INTERVAL];
      [uploadReq setHTTPMethod:@"PUT"];
      [uploadReq setHTTPBody:uploadData];
      NSURLSession *session = [self configureSession];
      NSURLSessionUploadTask *uploadTask = [session uploadTaskWithStreamedRequest:uploadReq];
      [uploadTask resume];
    }else{
        NSLog(@"download task location is nil");
    }
}

更新

在我分享一些时间后,下载任务可能会停止,并一直运行直到我稍后分享。

0 个答案:

没有答案