すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:初期化

最終更新日:Dec 19, 2023

OSSClientは、Object Storage Service (OSS) のiOSクライアントです。 OSSClientは、呼び出し元にバケットとオブジェクトを管理する一連のメソッドを提供します。 OSS SDK for iOSを使用してOSSへのリクエストを開始する前に、OSSClientインスタンスを初期化して設定する必要があります。

説明 OSSClientインスタンスのライフサイクルが、インスタンスが作成されるアプリケーションのライフサイクルと同じであることを確認します。 アプリケーションの起動時にOSSClientインスタンスを作成し、アプリケーションの停止時にインスタンスをリリースする必要があります。

OSSClientインスタンスの初期化

重要 モバイルデバイスは、様々な信頼できない環境で使用される。 AccessKeyIdAccessKeySecretをモバイルデバイスに保存してリクエストに署名することは非常に危険です。 自己署名モードで、またはSecurity Token Service (STS) から取得した資格情報を使用してOSSにアクセスすることを推奨します。

次のいずれかの方法を使用して、OSSClientインスタンスを作成できます。

STSを使用したOSSClientインスタンスの作成

次のコードは、STSを使用してOSSClientインスタンスを作成する方法の例を示しています。

// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
NSString * endpoint = @ "yourEndpoint";
// STSから取得した一時的なAccessKeyペアを指定します。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 
NSString * accessKeyId = @ "yourAccessKeyId";
NSString * accessKeySecret = @ "yourAccessKeySecret";
// STSから取得したセキュリティトークンを指定します。 
NSString * securityToken = @ "yourSecurityToken";

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

カスタムドメイン名を使用してOSSClientインスタンスを作成する

次のコードは、カスタムドメイン名を使用してOSSClientインスタンスを作成する方法の例を示しています。

// カスタムドメイン名を指定します。 
NSString * endpoint = @ "yourEndpoint";
// STSから取得した一時的なAccessKeyペアを指定します。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 
NSString * accessKeyId = @ "yourAccessKeyId";
NSString * accessKeySecret = @ "yourAccessKeySecret";
// STSから取得したセキュリティトークンを指定します。 
NSString * securityToken = @ "yourSecurityToken";

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

Apsara StackまたはプライベートリージョンでOSSClientインスタンスを作成する

次のコードは、Apsara StackまたはプライベートリージョンでOSSClientインスタンスを作成する方法の例を示しています。

// バケットが配置されているリージョンのエンドポイントを指定します。 
NSString * endpoint = @ "yourEndpoint";
// STSから取得した一時的なAccessKeyペアを指定します。 
NSString * accessKeyId = @ "yourAccessKeyId";
NSString * accessKeySecret = @ "yourAccessKeySecret";
// STSから取得したセキュリティトークンを指定します。 
NSString * securityToken = @ "yourSecurityToken";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId: accessKeySecurityToken: securityToken];
OSSClientConfiguration * configuration = [OSSClientConfiguration new];
// CNAMEの解像度をスキップします。 
configuration.cn ameExcludeList = @[endpoint];
OSSClient * client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider clientConfiguration:configuration]; 

自己署名モードでOSSClientインスタンスを作成する

次のコードは、自己署名モードでOSSClientインスタンスを作成する方法の例を示しています。

// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
NSString * endpoint = @ "yourEndpoint";
// 自分のサーバーで文字列に署名します。 
id<OSSCredentialProvider> credentialProvider = [[OSSCustomSignerCredentialProvider alloc] initWithImplementedSigner:^ NSString * _Nullable(NSString * _Nonnull contentToSign、NSError *__autoreleasing _Nullable * _Nullableエラー) {
    // 署名のためにコンテンツをサーバーに送信します。 contentは、リクエストパラメーターに基づいて連結された文字列です。 この例では、http:// localhost:8080/signを文字列に署名するURLとして使用します。 
    NSString * urlString = [NSString stringWithFormat:@ "http:// localhost:8080/sign?content =%@", contentToSign];
    NSURL * url = [NSURL URLWithString:urlString];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    OSSTaskCompletionSource * tcs = [OSSTaskCompletionSource taskCompletionSource];
    NSURLSession * session = [NSURLSession sharedSession];
    NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request
                                               completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                      if (error) {
                                                       [tcs setError:error];
                                                       return;
                                                   }
                                                   [tcs setResult:data];
                                               }];
    [sessionTask resume];
    [tcs.task waitUntilFinished];
    if (tcs.task.error) {
        * error = tcs.task.error;
        return nil;
    } else {
        NSData * data = tcs.task.result;
        NSDictionary * object = [NSJSONSerialization JSONObjectWithData: データ
                                                                options:kNilOptions
                                                                  error:nil];
        // 署名を取得します。 signatureは署名付き文字列です。 
        NSString * signature = object[@ "signature"];
        署名を返します。
    }
}];

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

自己署名モードの詳細については、「自己署名モード」をご参照ください。

OSSClient インスタンスの設定

ClientConfiguration は OSSClient の設定クラスです。 ClientConfigurationを使用して、プロキシサーバー、接続タイムアウト、最大接続数などのパラメーターを設定できます。

パラメーター説明メソッド
maxRetryCountリクエストエラー発生時の最大リトライ回数。 デフォルト値: 3。 設定. maxRetryCount
maxConcurrentRequestCountパラレルリクエストの最大数。 既定値:5 構成. maxConcurrentRequestCount
enableBackgroundTransmitServiceバックグラウンドタスクを有効にするかどうかを指定します。 デフォルト値: NO。 enableBackgroundTransmitService構成
backgroundSesseionIdentifierバックグラウンドセッションのカスタム識別子。 デフォルト値: com.aliyun.oss.backgroundsession configuration.backgroundSesseionIdentifier
isHttpdnsEnableHttpDNSを有効にするかどうかを指定します。
  • true: HttpDNSを有効にします。 バージョンが2.10.14より前のOSSClientの場合、trueがデフォルト値です。
  • false: HttpDNSを無効にします。 OSSClient 2.10.14以降の場合、デフォルト値はfalseです。
構成. isHttpdnsEnable
timeoutIntervalForRequestリクエストのタイムアウト期間。 単位は秒です。 デフォルト値:15。 configuration.timeoutIntervalForRequest
timeoutIntervalForResourceリソースのタイムアウト期間。 単位:日 デフォルト値 : 7 configuration.timeoutIntervalForResource
proxyHostプロキシサーバーへのアクセスに使用されるIPアドレス。 構成. proxyHost
proxyPortプロキシサーバーへの接続に使用されるポート。 configuration.proxyPort
userAgentMarkHTTPヘッダーのUser-Agentフィールド。 configuration.us erAgentMark
cnameExcludeListCNAMEの解決をスキップすることを指定します。 configuration.cn ameExcludeList
crc64VerifiableCRC-64を有効にするかどうかを指定します。 デフォルト値: NO。 有効な値:
  • YES: CRC-64を有効にします。
  • NO: CRC-64を無効にします。
configuration.crc64Verifiable
isAllowUACarrySystemInfoUser-Agentフィールドにシステム情報の伝達を許可するかどうかを指定します。 デフォルト値: NO。 有効な値:
  • YES: User-Agentフィールドがシステム情報を運ぶことを許可します。
  • NO: User-Agentフィールドにシステム情報の伝達を許可しません。
configuration.isAllowUACarrySystemInfo
isFollowRedirectsEnableHTTPリダイレクトを有効にするかどうかを指定します。 デフォルト値: いいえ。 有効な値:
  • YES: HTTPリダイレクトを有効にします。
  • NO: HTTPリダイレクトを無効にします。
構成。isFollowRedirectsEnable

ClientConfigurationを使用してOSSClientインスタンスのパラメーターを設定する方法の例を次に示します。

// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
NSString * endpoint = @ "yourEndpoint";
// STSから取得した一時的なAccessKeyペアを指定します。 
NSString * accessKeyId = @ "yourAccessKeyId";
NSString * accessKeySecret = @ "yourAccessKeySecret";
// STSから取得したセキュリティトークンを指定します。 
NSString * securityToken = @ "yourSecurityToken";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId: accessKeySecurityToken: securityToken];
OSSClientConfiguration * configuration = [OSSClientConfiguration new];
// リクエストエラー発生時の最大リトライ回数を指定します。 
設定. maxRetryCount = 3;
// 並列リクエストの最大数を指定します。 
configuration.maxConcurrentRequestCount = 3;
// バックグラウンドタスクを有効にするかどうかを指定します。 
enableBackgroundTransmitService = YES;
// バックグラウンドセッションのカスタム識別子を指定します。 
configuration.backgroundSesseionIdentifier = @ "yourgroundSesseionIdentifier";
// httpDnsを有効にするかどうかを指定します。 
構成。isHttpdnsEnable = YES;
// リクエストのタイムアウト時間を指定します。 
configuration.timeoutIntervalForRequest = 15;
// リソースのタイムアウト期間を指定します。 
configuration.timeoutIntervalForResource = 24*60*60;
// プロキシサーバーへのアクセスに使用されるIPアドレスを指定します。 
configuration.proxyHost = @ "yourProxyHost";
// プロキシサーバーのポートを指定します。 
configuration.proxyPort = @ 8080;
// HTTPヘッダーのUser-Agentフィールドを指定します。 
configuration.us erAgentMark = @ "yourUserAgent";
// CNAMEの解決をスキップするように指定します。 
configuration.cn ameExcludeList = @[@ "yourCname"];
// CRC-64を有効にするかどうかを指定します。 
configuration.crc64Verifiable = YES;
// User-Agentフィールドにシステム情報の伝達を許可するかどうかを指定します。 
configuration.isAllowUACarrySystemInfo = YES;
// HTTPリダイレクトを有効にするかどうかを指定します。 
構成。isFollowRedirectsEnable = NO;

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

ロギングを有効にする

モバイルデバイスは、様々な環境で使用される。 OSS SDK for iOSは、特定のリージョンまたは特定の期間中は使用できません。 起こりうる問題を特定するために、ロギングを有効にして、OSS SDK for iOSがローカルクライアントにログを記録できるようにします。 OSSClientを使用する前に、OSSClientインスタンスを初期化し、次のメソッドを呼び出してログを有効にします。
// ログ形式を指定します。 
// 2017/10/25 11:05:43:863 [デバッグ]: 第17回: <NSThread: 0x7f8099108580>{number = 3, name = (null)}
// 2017/10/25 11:05:43:863 [デバッグ]: 15番目: <NSThread: 0x7f80976052c0>
// 2017/10/25 11:05:43:863 [デバッグ]: -------- TestDebug -----------
// ロギングを有効にします。 
[OSSLog enableLog]; 
説明
  • ログはサンドボックスのCaches/OSSLogsディレクトリに保存されます。
  • ログをサーバーまたはAlibaba Cloud Log Serviceにアップロードできます。

OSSTask

  1. 呼び出されるすべてのAPI操作に対してOSSTaskが返されます。
    OSSTask * task = [client getObject:get];
  2. OSSTaskを指定します。
    • OSSTaskの継続を設定して非同期コールバックを実装します:
      [task continueWithBlock: ^(OSSTask * task) {
          // 何かをする
          ...
          nilを返します。}]; 
    • OSSTaskが完了するまで待って、同期コールバックを実装します。
      [task waitUntilFinished];