今天在使用AliyunOSS测试上传文件时, 发现了一个现象:
- 当上传正在进行, 此时将APP切换到后台, 上传会被暂停.
- 等待几秒后再切回到APP时, 上传才会继续进行.
- 如果切出去的时间比较长, 返回到APP时, 之前的上传进度会丢失, 上传任务会从0%重新开始.
http://cocoadocs.org/docsets/AliyunOSSiOS/2.1.0/index.html
https://help.aliyun.com/document_detail/32060.html
查阅了一下阿里云的SDK文档后, 发现了问题所在.
如果需要支持后台传输,将conf.enableBackgroundTransmitService赋值为YES后,
还需要设置每个OSSClient全局唯一的backgroundSessionIdentifier,
否则无法构造多个OSSClient实例,会遇到
A background URLSession with identifier com.aliyun.oss.backgroundsession already exists!异常。
在阿里云的SDK中可以看到enableBackgroundTransmitService 和 backgroundSessionIdentifier 这两个参数的说明.
参数.png
注意, 这两个参数只有在上传文件的时候才有效.
因为阿里云的SDK在上传时, 有两种方式:
- 从内存中的NSData上传使用: uploadingData
- 从文件上传时使用: uploadingFileURL
在初始化OSSClient时, 加上了OSSClientConfiguration, 就可以做到后台上传了.
// 初始化OSSClientConfiguration
OSSClientConfiguration *config = [OSSClientConfiguration new];
// 设置后台上传
config.enableBackgroundTransmitService = YES;
// 设置session唯一标识
config.backgroundSesseionIdentifier = key;
// 初始化OSSClient
OSSClient *client = [[OSSClient alloc] initWithEndpoint:AliYunHost credentialProvider:credential clientConfiguration:config];
每次在创建OSSClientConfiguration时, 必须保证backgroundSesseionIdentifier是唯一的, 不能存在2个相同的backgroundSesseionIdentifier.否则无法上传.
按照要求添加了OSSClientConfiguration后, 上传任务会一直进行, 即使APP切换到后台, 也不会暂停.直到上传完毕执行completion回调.
网友评论