ara*_*hya 7 iphone ios afnetworking afnetworking-2
我的应用需要从用户手机上传视频文件,然后在服务器上处理.问题是文件的大小可以达到200 MB以上,用户不会保持应用程序打开以等待文件上传.由于苹果不允许应用程序在后台运行超过有限的时间.如何确保上传文件.我正在使用afnetworking来设置ios 7库给出的上传任务.
如果有人能指出我正确的方向或有任何解决方案,我们将不胜感激.我已经把这个问题拖了很长时间.谢谢.
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
[manager setTaskDidSendBodyDataBlock:^(NSURLSession *session,NSURLSessionTask *task ,int64_t bytesSent, int64_t totalBytesSent,int64_t totalBytesExpectedToSend){
CGFloat progress = ((CGFloat)totalBytesSent / (CGFloat)sensize);
NSLog(@"Uploading files %lld -- > %lld",totalBytesSent,totalBytesExpectedToSend);
[self.delegate showingProgress:progress forIndex:ind];
}];
dataTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
}
}];
Run Code Online (Sandbox Code Playgroud)
我的请求是正常的多部分表单请求.
使用:
NSURLSessionConfiguration:backgroundSessionConfiguration:
Run Code Online (Sandbox Code Playgroud)
代替
NSURLSessionConfiguration:defaultSessionConfiguration
Run Code Online (Sandbox Code Playgroud)
从NSURLSessionConfiguration:backgroundSessionConfiguration:文档:
后台会话中的上载和下载任务由外部守护程序而不是应用程序本身执行.因此,即使应用程序被暂停,退出或崩溃,传输也会在后台继续进行.
所以在你的情况下,改变:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
Run Code Online (Sandbox Code Playgroud)
至:
NSString *appID = [[NSBundle mainBundle] bundleIdentifier];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:appID];
Run Code Online (Sandbox Code Playgroud)
application:handleEventsForBackgroundURLSession:completionHandler:在您的应用委托上实施将允许您的应用在上传完成后被唤醒(即,在后台模式下未暂停或未终止)(无论是否已成功完成).
不要与背景提取混淆.你不需要它.背景提取简单地唤醒你应用程序定期给你的应用程序定期获取少量内容的机会.但是,它可能对定期重新启动失败的"后台模式"上传很有用.
Sen*_*doa -1
如果使用默认会话配置,则应使用后台会话配置。这可确保用户退出应用程序后,您的数据传输将在后台继续进行。
\n\n当然,只要用户在设备的“设置”应用程序中为您的应用程序启用了后台提取,这就是正确的。
\n\n请务必在项目设置中启用后台获取功能:
\n\n
\n (来源:migueldiazrubio.com)

\n (来源:migueldiazrubio.com)
然后在您的应用程序委托中实现application:handleEventsForBackgroundURLSession:completionHandler:,以便在数据传输结束时收到通知,并使用接收/发送的文件在应用程序内执行您需要执行的任何操作(UI update\xe2\x80\xa6)。不要忘记致电通知completionHandler系统您已结束任务。然后,iOS 会截取应用程序活动屏幕的屏幕截图,并更新 iOS 7 多任务屏幕中的屏幕截图。