全部产品
阿里云办公

初始化

更新时间:2018-03-14 16:40:07

OSSClient是OSS服务的iOS客户端,它为调用者提供了一系列的方法,可以用来操作,管理存储空间(bucket)和文件(object)等。在使用SDK发起对OSS的请求前,您需要初始化一个OSSClient实例,并对它进行一些必要设置。

OSSClient的生命周期和应用程序的生命周期保持一致即可。在应用程序启动时创建一个ossClient,在应用程序结束时销毁即可。

确定Endpoint

Endpoint是阿里云OSS服务在各个区域的地址,目前支持两种形式

Endpoint类型 解释
OSS区域地址 使用OSS Bucket所在区域地址,各个区域Endpoint参考这里
用户自定义域名 用户自定义域名,且CNAME指向OSS域名

关于Endpoint,可以参考:点击查看

OSS区域地址

使用OSS Bucket所在区域地址,Endpoint查询可以有下面两种方式:

  • 查询Endpoint与区域对应关系详情,可以参考:点击查看
  • 您可以登录 阿里云OSS控制台,进入Bucket概览页,Bucket域名的后缀部分:如bucket-1.oss-cn-hangzhou.aliyuncs.comoss-cn-hangzhou.aliyuncs.com部分为该Bucket的外网Endpoint。

Cname

您可以将自己拥有的域名通过Cname绑定到某个存储空间(bucket)上,然后通过自己域名访问存储空间内的文件。

比如您要将域名new-image.xxxxx.com绑定到深圳区域的名称为image的存储空间上:您需要到您的域名xxxxx.com托管商那里设定一个新的域名解析,将http://new-image.xxxxx.com 解析到 http://image.oss-cn-shenzhen.aliyuncs.com ,类型为CNAME。

设置EndPoint和凭证

移动终端是一个不受信任的环境,把AccessKeyIdAccessKeySecret直接保存在终端用来加签请求,存在极高的风险。建议只在测试时使用明文设置模式,业务应用推荐使用STS鉴权模式自签名模式,详细请参考:访问控制移动端直传

如果用STS鉴权模式,推荐使用OSSAuthCredentialProvider方式直接访问鉴权应用服务器,token过期后可以自动更新。

更多信息可查看可查看sample 点击查看

设置EndPoint和CredentialProvider示例如下:

  1. NSString *endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  2. //直接访问鉴权服务器(推荐,token过期后可以自动更新)
  3. id<OSSCredentialProvider> credential = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"鉴权服务器地址,例如http://abc.com"];
  4. client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];

提示:

设置EndPoint为cname

如果您已经在bucket上绑定cname,将该cname直接设置到endPoint即可。如:

  1. NSString *endpoint = "http://new-image.xxxxx.com";
  2. ...
  3. client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];

注意,苹果要求支持ATS标准后,所有Endpoint URL都必须为HTTPS URL,而cname域名暂不支持证书设置,所以暂时不能用cname设置Endpoint

更多鉴权方式参考:访问控制

启用日志

移动端的使用环境比较复杂。会出现部分区域或某一个时段无法正常使用oss sdk的情况。为了进一步方便开发者定位问题,oss sdk 在开启日志记录功能后,会将一些log信息记录在本地。如需开启需要在OSSClient使用之前进行初始化,调用如下方法即可。

补充说明:

  • 文件存储位置在沙盒的Caches/OSSLogs文件夹内。
  • 使用者可以自行选择将文件上传至服务器,进一步追踪问题。
  • 也可以接入阿里云SLS日志服务进行日志文件上传, 日志服务传送门
  1. //日志的样式
  2. //2017/10/25 11:05:43:863 [Debug]: 第17次:<NSThread: 0x7f8099108580>{number = 3, name = (null)}
  3. //2017/10/25 11:05:43:863 [Debug]: 第15次:<NSThread: 0x7f80976052c0>
  4. //2017/10/25 11:05:43:863 [Debug]: ----------TestDebug------------
  5. [OSSLog enableLog];//执行该方法,开启日志记录

设置网络参数

也可以在初始化的时候设置详细的ClientConfiguration:

  1. NSString *endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
  2. //直接访问鉴权服务器(推荐,token过期后可以自动更新)
  3. id<OSSCredentialProvider> credential = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"鉴权服务器地址,例如http://abc.com"];
  4. client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];
  5. OSSClientConfiguration * conf = [OSSClientConfiguration new];
  6. conf.maxRetryCount = 3; // 网络请求遇到异常失败后的重试次数
  7. conf.timeoutIntervalForRequest = 30; // 网络请求的超时时间
  8. conf.timeoutIntervalForResource = 24 * 60 * 60; // 允许资源传输的最长时间
  9. client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential clientConfiguration:conf];

对于OSSTask的一些说明

所有调用api的操作,都会立即获得一个OSSTask,如:

  1. OSSTask * task = [client getObject:get];

可以为这个Task设置一个延续(continution),以实现异步回调,如:

  1. [task continueWithBlock: ^(OSSTask *task) {
  2. // do something
  3. ...
  4. return nil;
  5. }];

也可以等待这个Task完成,以实现同步等待,如:

```objc[task waitUntilFinished];

本文导读目录