iOS SDK简介

接入指南

接入SDK

通过cocoapods引入PDS SDK,只需要在Podfile中加入

pod 'PDS_SDK'

然后执行命令pod update即可接入SDK

初始化SDK

使用SDK前提是您已经开通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不负责刷新accessToken。需要SDK适用方从自己的服务端那边定时请求刷新accessToken并传给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

具体的接口说明见[阿里云官方文档](https://help.aliyun.com/document_detail/440389.html)

开源地址

https://github.com/aliyun/aliyun-pds-objc-sdk

更新日志

0.0.2 2022-01-24

1. 增加直接上传本地照片asset的功能

2. 增加文件接口API

3. 修复上传下载断点续传

4. 修复部分文件CRC64校验失败的问题

5. 修复部分服务端错误代码没有正确处理的问题

0.0.1 2021-12-01

1. 第一版,支持文件上传下载/基本文件操作