今天在使用AliyunOSS測試上傳文件時, 發(fā)現(xiàn)了一個現(xiàn)象:
- 當(dāng)上傳正在進行, 此時將APP切換到后臺, 上傳會被暫停.
- 等待幾秒后再切回到APP時, 上傳才會繼續(xù)進行.
- 如果切出去的時間比較長, 返回到APP時, 之前的上傳進度會丟失, 上傳任務(wù)會從0%重新開始.
http://cocoadocs.org/docsets/AliyunOSSiOS/2.1.0/index.html
https://help.aliyun.com/document_detail/32060.html
查閱了一下阿里云的SDK文檔后, 發(fā)現(xiàn)了問題所在.
如果需要支持后臺傳輸,將conf.enableBackgroundTransmitService賦值為YES后,
還需要設(shè)置每個OSSClient全局唯一的backgroundSessionIdentifier,
否則無法構(gòu)造多個OSSClient實例,會遇到
A background URLSession with identifier com.aliyun.oss.backgroundsession already exists!異常。
在阿里云的SDK中可以看到enableBackgroundTransmitService 和 backgroundSessionIdentifier 這兩個參數(shù)的說明.
參數(shù).png
注意, 這兩個參數(shù)只有在上傳文件的時候才有效.
因為阿里云的SDK在上傳時, 有兩種方式:
- 從內(nèi)存中的NSData上傳使用: uploadingData
- 從文件上傳時使用: uploadingFileURL
在初始化OSSClient時, 加上了OSSClientConfiguration, 就可以做到后臺上傳了.
// 初始化OSSClientConfiguration
OSSClientConfiguration *config = [OSSClientConfiguration new];
// 設(shè)置后臺上傳
config.enableBackgroundTransmitService = YES;
// 設(shè)置session唯一標(biāo)識
config.backgroundSesseionIdentifier = key;
// 初始化OSSClient
OSSClient *client = [[OSSClient alloc] initWithEndpoint:AliYunHost credentialProvider:credential clientConfiguration:config];
每次在創(chuàng)建OSSClientConfiguration時, 必須保證backgroundSesseionIdentifier是唯一的, 不能存在2個相同的backgroundSesseionIdentifier.否則無法上傳.
按照要求添加了OSSClientConfiguration后, 上傳任務(wù)會一直進行, 即使APP切換到后臺, 也不會暫停.直到上傳完畢執(zhí)行completion回調(diào).