全部產品
Search
文件中心

Object Storage Service:iOS初始化

更新時間:Sep 12, 2024

OSSClient是OSS服務的iOS用戶端,為調用者提供了一系列的方法進行操作、管理儲存空間(Bucket)和檔案(Object)等。在使用SDK發起對OSS的請求前,您需要初始化一個OSSClient執行個體,並對OSSClient執行個體進行必要設定。

說明

OSSClient的生命週期需與應用程式的生命週期保持一致。即您需要在應用啟動時建立一個全域的OSSClient,在應用結束時銷毀OSSClient。

初始化OSSClient

重要

移動終端是一個不受信任的環境,把AccessKeyIdAccessKeySecret直接儲存在終端用來加簽請求,存在極高的風險。推薦使用STS鑒權模式或自簽名模式。

您可以通過以下多種方式建立OSSClient。

使用STS建立OSSClient

以下代碼用於使用STS建立OSSClient。

// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider];

使用自訂網域名建立OSSClient

以下代碼用於使用自訂網域名建立OSSClient。

// yourEndpoint填寫自訂網域名。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider];

專有雲或專有域環境建立OSSClient

以下代碼用於在專有雲或專有域環境建立OSSClient。

// yourEndpoint填寫Bucket所在地區對應的Endpoint。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClientConfiguration *configuration = [OSSClientConfiguration new];
// 跳過CNAME解析。
configuration.cnameExcludeList = @[endpoint];
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider clientConfiguration:configuration];

配置OSSClient

ClientConfiguration是OSSClient的配置類,您可通過此類來配置代理、連線逾時、最大串連數等參數。

參數

描述

方法

maxRetryCount

請求失敗後最大的重試次數。預設3次。

configuration.maxRetryCount

maxConcurrentRequestCount

最大並發數。預設為5。

configuration.maxConcurrentRequestCount

enableBackgroundTransmitService

是否開啟背景工作,預設不開啟。

configuration.enableBackgroundTransmitService

backgroundSesseionIdentifier

自訂後台工作階段識別項,預設值為com.aliyun.oss.backgroundsession

configuration.backgroundSesseionIdentifier

isHttpdnsEnable

是否開啟httpDns。

  • true:2.10.14及以下版本預設開啟httpDns。

  • false:2.10.14及以上版本預設關閉httpDns。

configuration.isHttpdnsEnable

timeoutIntervalForRequest

請求逾時時間,預設15秒。

configuration.timeoutIntervalForRequest

timeoutIntervalForResource

資源逾時時間,預設7天。

configuration.timeoutIntervalForResource

proxyHost

Proxy 伺服器主機地址。

configuration.proxyHost

proxyPort

Proxy 伺服器連接埠。

configuration.proxyPort

userAgentMark

使用者代理程式中HTTP的User-Agent頭。

configuration.userAgentMark

cnameExcludeList

列表中的元素將跳過CNAME解析。

configuration.cnameExcludeList

crc64Verifiable

是否開啟CRC64校正。取值如下:

  • YES:開啟CRC64校正。

  • NO(預設值):關閉CRC64校正。

configuration.crc64Verifiable

isAllowUACarrySystemInfo

是否允許User-Agent攜帶系統資訊。取值如下:

  • YES:允許User-Agent攜帶系統資訊。

  • NO(預設值):不允許User-Agent攜帶系統資訊。

configuration.isAllowUACarrySystemInfo

isFollowRedirectsEnable

是否開啟HTTP重新導向。取值如下:

  • YES:開啟HTTP重新導向。

  • NO(預設值):關閉HTTP重新導向。

configuration.isFollowRedirectsEnable

以下代碼用於使用ClientConfiguration配置OSSClient參數。

// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClientConfiguration *configuration = [OSSClientConfiguration new];
// 請求失敗後最大的重試次數。
configuration.maxRetryCount = 3;
// 最大並發數。
configuration.maxConcurrentRequestCount = 3;
// 是否開啟背景工作。
configuration.enableBackgroundTransmitService = YES;
// 自訂後台工作階段識別項。
configuration.backgroundSesseionIdentifier = @"yourBackgroundSesseionIdentifier";
// 是否開啟httpDns。
configuration.isHttpdnsEnable = YES;
// 請求逾時時間。
configuration.timeoutIntervalForRequest = 15;
// 資源逾時時間。
configuration.timeoutIntervalForResource = 24 * 60 * 60;
// Proxy 伺服器主機地址。
configuration.proxyHost = @"yourProxyHost";
// Proxy 伺服器連接埠。
configuration.proxyPort = @8080;
// 使用者代理程式中HTTP的User-Agent頭。
configuration.userAgentMark = @"yourUserAgent";
// 列表中的元素將跳過CNAME解析。
configuration.cnameExcludeList = @[@"yourCname"];
// 是否開啟CRC校正。
configuration.crc64Verifiable = YES;
// 是否允許User-Agent攜帶系統資訊。
configuration.isAllowUACarrySystemInfo = YES;
// 是否開啟HTTP重新導向。
configuration.isFollowRedirectsEnable = NO;

OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider clientConfiguration:configuration];

啟用日誌

移動端的使用環境比較複雜,部分地區或某個時段會出現無法正常使用OSS SDK的情況。為了進一步定位開發人員遇到的問題,OSS SDK在開啟日誌記錄功能後,會將日誌資訊記錄在本地。使用OSSClient前完成初始化,並調用如下方法開啟日誌記錄。

// 日誌樣式。
//2017/10/25 11:05:43:863  [Debug]: 第17次:<NSThread: 0x7f8099108580>{number = 3, name = (null)}
//2017/10/25 11:05:43:863  [Debug]: 第15次:<NSThread: 0x7f80976052c0>
//2017/10/25 11:05:43:863  [Debug]: ----------TestDebug------------
// 開啟日誌記錄。
[OSSLog enableLog];                
說明
  • 記錄檔儲存在沙箱的Caches/OSSLogs檔案夾內。

  • 您可以自行選擇將檔案上傳至伺服器,或者選擇接入阿里雲Log Service上傳記錄檔。

OSSTask

  1. 所有調用API操作均會返回一個OSSTask。

    OSSTask * task = [client getObject:get];
  2. 設定OSSTask。

    • 為OSSTask設定延續 (continuation) 以實現非同步回調。

      [task continueWithBlock: ^(OSSTask *task) {
          // do something
          ...
          return nil;
      }];
    • 等待OSSTask完成以實現同步回調。

      [task waitUntilFinished];