OSSClientは、Object Storage Service (OSS) のiOSクライアントです。 OSSClientは、呼び出し元にバケットとオブジェクトを管理する一連のメソッドを提供します。 OSS SDK for iOSを使用してOSSへのリクエストを開始する前に、OSSClientインスタンスを初期化して設定する必要があります。
説明 OSSClientインスタンスのライフサイクルが、インスタンスが作成されるアプリケーションのライフサイクルと同じであることを確認します。 アプリケーションの起動時にOSSClientインスタンスを作成し、アプリケーションの停止時にインスタンスをリリースする必要があります。
OSSClientインスタンスの初期化
重要 モバイルデバイスは、様々な信頼できない環境で使用される。
AccessKeyId
とAccessKeySecret
をモバイルデバイスに保存してリクエストに署名することは非常に危険です。 自己署名モードで、または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 |
isHttpdnsEnable | HttpDNSを有効にするかどうかを指定します。
| 構成. isHttpdnsEnable |
timeoutIntervalForRequest | リクエストのタイムアウト期間。 単位は秒です。 デフォルト値:15。 | configuration.timeoutIntervalForRequest |
timeoutIntervalForResource | リソースのタイムアウト期間。 単位:日 デフォルト値 : 7 | configuration.timeoutIntervalForResource |
proxyHost | プロキシサーバーへのアクセスに使用されるIPアドレス。 | 構成. proxyHost |
proxyPort | プロキシサーバーへの接続に使用されるポート。 | configuration.proxyPort |
userAgentMark | HTTPヘッダーのUser-Agentフィールド。 | configuration.us erAgentMark |
cnameExcludeList | CNAMEの解決をスキップすることを指定します。 | configuration.cn ameExcludeList |
crc64Verifiable | CRC-64を有効にするかどうかを指定します。 デフォルト値: NO。 有効な値:
| configuration.crc64Verifiable |
isAllowUACarrySystemInfo | User-Agentフィールドにシステム情報の伝達を許可するかどうかを指定します。 デフォルト値: NO。 有効な値:
| configuration.isAllowUACarrySystemInfo |
isFollowRedirectsEnable | 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
- 呼び出されるすべてのAPI操作に対してOSSTaskが返されます。
OSSTask * task = [client getObject:get];
- OSSTaskを指定します。
- OSSTaskの継続を設定して非同期コールバックを実装します:
[task continueWithBlock: ^(OSSTask * task) { // 何かをする ... nilを返します。}];
- OSSTaskが完了するまで待って、同期コールバックを実装します。
[task waitUntilFinished];
- OSSTaskの継続を設定して非同期コールバックを実装します: