快速入门

最近更新时间:2025-09-24 14:27:43

我的收藏

准备工作

您需要一个 iOS 应用,这个应用可以是您现有的工程,也可以是您新建的一个空的工程。
请确保您的 iOS 应用目标为 iOS 9及以上。

步骤1:安装 SDK

在您工程的 Podfile 添加以下依赖,并执行 pod install
pod "QCloudCOSSMH/Api"

步骤2:开始使用

导入头文件

#import <QCloudCOSSMHApi.h>

设置访问域名

使用SDK提供的相关服务前,需要先设置SDK的访问域名。
// 配置发布域名
[QCloudSMHBaseRequest setBaseRequestHost:@"<libraryId>.api.tencentsmh.cn" targetType:QCloudECDTargetRelease];
[QCloudSMHBaseRequest setTargetType:QCloudECDTargetRelease];
注意:
控制台创建媒体库后,控制台会展示为您生成的专属域名,该域名是您访问所有服务的前提,强烈建议您在应用初始化后通过SDK设置您的专属域名。


初始化 SMH 服务并实现获取 accessToken 协议

说明:
User 模块不需要 accessToken,若仅使用 User,可以跳过此步骤。
集成 API 和 User 时,获取 accessToken 的方式。
API 模块接口在发出请求时需要携带 accessToken,所以需要实现 QCloudSMHAccessTokenProvider 协议,在该协议中获取包含 accessToken 以及 spaceId 等信息的 QCloudSMHSpaceInfo 对象通过参数 continueBlock 回调给 SDK。
- (void)accessTokenWithRequest:(QCloudSMHBizRequest *)request
urlRequest:(NSURLRequest *)urlRequst
compelete:(QCloudSMHAuthentationContinueBlock)continueBlock {
// 首先从您的访问令牌服务器获取包含了访问令牌信息的响应
QCloudSMHSpaceInfo * spaceInfo = [QCloudSMHSpaceInfo new];
spaceInfo.accessToken = @""; // 访问令牌 Token
spaceInfo.expiresIn = @""; // 访问令牌的有效时长,单位为秒
spaceInfo.libraryId = @""; //
spaceInfo.spaceId = @"";
continueBlock(sapceInfo, nil);
}
SDK 提供了一个 QCloudSMHAccessTokenFenceQueue 的脚手架,实现对 accessToken 的缓存与复用。脚手架在密钥过期之后会重新调用该协议的方法来重新获取新的密钥,直到该密钥过期时间大于设备的当前时间。
说明:
建议把初始化过程放在 AppDelegate 或者程序单例中。
使用脚手架您需要实现 QCloudAccessTokenFenceQueueDelegate 协议。
1. 初始化脚手架。
@property (nonatomic) QCloudSMHAccessTokenFenceQueue *fenceQueue;

self.fenceQueue = [QCloudSMHAccessTokenFenceQueue new];
self.fenceQueue.delegate = self;
2. 实现QCloudAccessTokenFenceQueueDelegate
- (void)fenceQueue:(QCloudSMHAccessTokenFenceQueue *)queue
request:(QCloudSMHBizRequest *)request
requestCreatorWithContinue:(QCloudAccessTokenFenceQueueContinue)continueBlock {
// 首先从您的访问令牌服务器获取包含了访问令牌信息的响应
QCloudSMHSpaceInfo * spaceInfo = [QCloudSMHSpaceInfo new];
spaceInfo.accessToken = @""; // 访问令牌 Token
spaceInfo.expiresIn = @""; // 访问令牌的有效时长,单位为秒
spaceInfo.libraryId = @""; //
spaceInfo.spaceId = @"";
continueBlock(sapceInfo, nil);
}

// 在该方法中使用脚手架进行请求 sdk 内部缓存的 accessToken 并使用 continueBlock 回调给 sdk,若
// sdk 内缓存的 accessToken 过期或没有,则跳转到上面方法中进行请求最新的 accessToken 回调给 sdk 并缓存。
- (void)accessTokenWithRequest:(QCloudSMHBizRequest *)request
urlRequest:(NSURLRequest *)urlRequst
compelete:(QCloudSMHAuthentationContinueBlock)continueBlock {
[self.fenceQueue performRequest:request
withAction:^(QCloudSMHSpaceInfo *_Nonnull accessToken, NSError *_Nonnull error) {
if (error) {
continueBlock(nil, error);
} else {
continueBlock(accessToken, nil);
}
}];
}
说明:
若仅需要 API 模块,则需要一个可以获取智能媒资托管服务访问令牌的业务服务端接口,访问令牌的相关说明请参见 生成访问令牌
实现 QCloudSMHAccessTokenProvider 协议,在该协议中获取 accessToken 并包装成一个 QCloudSMHSpaceInfo 对象通过参数 continueBlock 回调给 SDK。

步骤3:访问 SMH 服务

以列出文件列表为例,其他接口访问方式与此类似。
QCloudSMHListContentsRequest *req = [QCloudSMHListContentsRequest new];
// 用户所在空间 ID
req.spaceId = @"spaceId";
// 用户所在 libraryid
req.libraryId = @"libraryId";

// 目录路径或相簿名,对于多级目录,使用斜杠(/)分隔,例如 foo/bar;对于根目录,该参数留空;
req.dirPath = @"dirpath";
[req setFinishBlock:^(QCloudSMHContentListInfo *_Nullable result, NSError *_Nullable error) {
// result 文件列表数据
// error 报错信息
}];
// 发起请求
[[QCloudSMHService defaultSMHService] listContents:req];

通用参数介绍

libraryId:媒体库 ID,必选参数。
spaceId:空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数。
accessToken:访问令牌,必选参数。
说明:
更多概念请参见 基本概念