本文为阿里云PDS(Drive and Photo Service)iOS SDK的接入与使用指南,可以帮助开发者快速集成网盘与相册服务功能。
接入指南
接入SDK
通过CocoaPods工具引入PDS SDK,只需在Podfile中添加pod 'PDS_SDK'
,然后执行命令pod update
,即可完成SDK的接入。
初始化SDK
使用SDK前提是您已经开通PDS服务,并且在控制台创建了域实例。参见开始使用 PDS
SDK初始化代码
PDSClientConfig *clientConfig = [[PDSClientConfig alloc] init];
clientConfig.userAgent = config.userAgent;//当前设备的UA
clientConfig.dbName = config.dbName;//数据库名称,可选
clientConfig.host = config.apiHost;//API Host,需要从控制台中获取
[PDSClientManager setupWithAccessToken:config.accessToken clientConfig:clientConfig];//accessToken是服务端通过accessKeyId和accessKeySecret获取以后下发给客户端的
Access Token刷新。
说明
需要注意的是,在目前版本中SDK不负责刷新Access Token。需要SDK适用方从自己的服务端那边定时请求刷新Access Token并传给SDK。
[[PDSClientManager defaultClient] setAccessToken:accessToken];
上传普通文件
PDSDownloadUrlRequest *request = [[PDSDownloadUrlRequest alloc] initWithDownloadUrl:taskInfo.downloadUrl
destination:filePath
fileSize:[taskInfo.fileSize unsignedLongLongValue]
fileID:taskInfo.fileId
hashValue:taskInfo.hashValue
hashType:PDSFileHashTypeCrc64
driveID:taskInfo.driveId
shareID:taskInfo.shareId];
downloadTask = [[PDSClientManager defaultClient].file downloadUrl:request taskIdentifier:taskInfo.taskId];
直接通过照片ID上传文件
PDSUploadPhotoRequest *request = [[PDSUploadPhotoRequest alloc] initWithLocalIdentifier:localIdentifier
parentFileID:taskInfo.parentId
driveID:taskInfo.driveId
shareID:taskInfo.shareId
fileName:taskInfo.fileName];
uploadTask = [[PDSClientManager defaultClient].file uploadPhotoAsset:request taskIdentifier:taskInfo.taskId];
说明
注意,这里创建的uploadTask是个局部变量,使用方需要自己持有对它的引用,不然这个对象被释放以后回调会出问题。
完成和进度回调
@weakify(self);
[uploadTask setResponseBlock:^(PDSFileMetadata *result, PDSRequestError *requestError, NSString *taskIdentifier) {
@strongify(self);
if (requestError) {//上传失败
//TODO 错误处理
} else {//上传成功,移除临时文件
[[PDSClientManager defaultClient].file cleanUploadTaskWithTaskIdentifier:taskIdentifier force:YES];
}
} queue:self.transferQueue];
[uploadTask setProgressBlock:^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
@strongify(self);
//TODO 进度回调
} queue:self.transferQueue];
说明
注意,上传完成或者失败以后,如果确认之后不会再继续对这个文件进行断点续传等操作,需要调用cleanUploadTaskWithTaskIdentifer
方法删除这个上传任务的相关缓存。
下载文件
PDSDownloadTask *downloadTask = nil;
PDSDownloadUrlRequest *request = [[PDSDownloadUrlRequest alloc] initWithDownloadUrl:taskInfo.downloadUrl
destination:filePath
fileSize:[taskInfo.fileSize unsignedLongLongValue]
fileID:taskInfo.fileId
hashValue:taskInfo.hashValue
hashType:PDSFileHashTypeCrc64
driveID:taskInfo.driveId
shareID:taskInfo.shareId];
downloadTask = [[PDSClientManager defaultClient].file downloadUrl:request taskIdentifier:taskInfo.taskId];
进度和完成回调
@weakify(self);
[downloadTask setResponseBlock:^(PDSFileMetadata *_Nullable result, PDSRequestError *_Nullable requestError, NSString *_Nonnull taskIdentifier) {
@strongify(self);
if (result) {//下载成功
}
if (requestError) {//下载失败
}
} queue:self.transferQueue];
[downloadTask setProgressBlock:^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
@strongify(self);
//进度回调
} queue:self.transferQueue];
文件操作API
常用的文件接口可以通过[PDSClientManager defaultClient].file
下面的类方法进行调用。当前支持的文件操作如下:
Complete
Create
Move
Delete
Copy
Update
GetDownloadUrl
GetUploadUrl
GetAsyncTask
具体接口参数的说明,请参见文件管理。
开源地址
更新日志
0.0.2 2022-01-24
增加直接上传本地照片asset的功能
增加文件接口API
修复上传下载断点续传
修复部分文件CRC64校验失败的问题
修复部分服务端错误代码没有正确处理的问题
0.0.1 2021-12-01
第一版,支持文件上传下载/基本文件操作
该文章对您有帮助吗?