OSSClient for Androidは、発信者にObject Storage Service (OSS) のバケットとオブジェクトを管理するさまざまな方法を提供します。 OSS SDK for Androidを使用してOSSへのリクエストを開始する前に、OSSClientインスタンスを初期化して設定する必要があります。
OSSClientインスタンスのライフサイクルが、インスタンスが作成されるアプリケーションのライフサイクルと同じであることを確認します。 これには、アプリケーションの起動時にOSSClientインスタンスを作成し、アプリケーションの停止時にインスタンスをリリースする必要があります。
OSSClientインスタンスの初期化
モバイルデバイスは、様々な信頼できない環境で使用される。 したがって、リクエストに署名するためにAccessKeyId
とAccessKeySecret
をモバイルデバイスに保存することは非常に危険です。 Security Token Service (STS) 認証モードまたは自己署名モードを使用することを推奨します。
次のいずれかの方法を使用して、OSSClientインスタンスを作成できます。
API操作を呼び出してオブジェクトをアップロードまたはダウンロードする方法の詳細については、「OSS SDK For Androidの使用を開始する」をご参照ください。
バケットをリストするためにOSSClientインスタンスを初期化するために使用されるメソッドは、次の例で使用されるメソッドとは異なります。 詳細については、「バケットのリスト」をご参照ください。
STS の使用
次のサンプルコードは、STSアクセス資格情報を使用してOSSClientインスタンスを作成する方法の例を示しています。
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Specify the temporary AccessKey pair obtained from STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Specify the security token obtained from STS.
String securityToken = "yourSecurityToken";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// Create an OSSClient instance.
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
カスタムドメイン名を使用する
次のサンプルコードは、カスタムドメイン名を使用してOSSClientインスタンスを作成する方法の例を示しています。
// Specify the custom domain name.
String endpoint = "yourEndpoint";
// Specify the temporary AccessKey pair obtained from STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Specify the security token obtained from STS.
String securityToken = "yourSecurityToken";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// Create an OSSClient instance.
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
Apsara Stackまたはプライベートエンドポイントの使用
次のサンプルコードは、Apsara Stackまたはプライベートエンドポイントを使用してOSSClientインスタンスを作成する方法の例を示しています。
// Specify the endpoint of the region in which the bucket is located.
String endpoint = "yourEndpoint";
// Specify the temporary AccessKey pair obtained from STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Specify the security token obtained from STS.
String securityToken = "yourSecurityToken";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration configuration = new ClientConfiguration();
// Skip CNAME resolution.
List<String> excludeList = new ArrayList<>();
excludeList.add(endpoint);
configuration.setCustomCnameExcludeList(excludeList);
// Create an OSSClient instance.
configuration.setSignVersion(SignVersion.V4);
// Create an OSSClient instance.
OSSClient oss = new OSSClient(getApplicationContext(),endpoint, credentialProvider);
oss.setRegion(region);
OSSClient インスタンスの設定
ClientConfiguration は OSSClient の設定クラスです。 ClientConfigurationを使用して、プロキシサーバーのパラメーター、接続タイムアウト期間、最大接続数などのパラメーターを指定できます。 下表に、各パラメーターを説明します。
パラメーター | 説明 | 移動方法 |
maxConcurrentRequest | 同時リクエストの最大数。 既定値:5 | ClientConfiguration.setMaxConcurrentRequest |
socketTimeout | Socketレイヤーでのデータ送信のタイムアウト期間。 単位:ミリ秒。 デフォルト値: 60000 | ClientConfiguration.setSocketTimeout |
connectionTimeout | 接続を確立するためのタイムアウト期間。 単位:ミリ秒。 デフォルト値: 60000 | ClientConfiguration.setConnectionTimeout |
max_log_size | ログの最大サイズ。 単位:MB。 既定値:5 | ClientConfiguration.setMaxLogSize |
maxErrorRetry | リクエストエラーが発生した場合の最大リトライ回数。 デフォルト値:2 | ClientConfiguration.setMaxErrorRetry |
customCnameExcludeList | CNAME解決をスキップする要素のリスト。 | ClientConfiguration.setCustomCnameExcludeList |
proxyHost | プロキシサーバーのホスト。 | ClientConfiguration.setProxyHost |
proxyPort | プロキシサーバーのポート。 | ClientConfiguration.setProxyPort |
mUserAgentMark | HTTP User-Agentヘッダー。 | ClientConfiguration.setUserAgentMark |
httpDnsEnable | HTTPDNSを有効にするかどうかを指定します。
| ClientConfiguration.setHttpDnsEnable |
checkCRC64 | CRC-64を有効にするかどうかを指定します。 有効な値:
| ClientConfiguration.setCheckCRC64 |
followRedirectsEnable | HTTPリダイレクトを有効にするかどうかを指定します。 有効な値:
| ClientConfiguration.setFollowRedirectsEnable |
okHttpClient | okhttpClientを設定します。 | ClientConfiguration.setOkHttpClient |
次のサンプルコードは、ClientConfigurationを使用してOSSClientインスタンスのパラメーターを指定する方法の例を示しています。
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Specify the temporary AccessKey pair obtained from STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Specify the security token obtained from STS.
String securityToken = "yourSecurityToken";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "yourRegion";
ClientConfiguration configuration = new ClientConfiguration();
// Specify the maximum number of concurrent requests. Default value: 5.
// configuration.setMaxConcurrentRequest(3);
// Specify the timeout period for data transmission at the Socket layer. Default value: 60. Unit: seconds.
// configuration.setSocketTimeout(50000);
// Specify the timeout period for establishing a connection. Default value: 60. Unit: seconds.
// configuration.setConnectionTimeout(50000);
// Specify the maximum size of a log. Default value: 5. Unit: MB.
// configuration.setMaxLogSize(3 * 1024 * 1024);
// Specify the maximum number of retries when a request error occurs. Default value: 2.
// configuration.setMaxErrorRetry(3);
// Specify that CNAME resolution is skipped for the elements in the list.
// List<String> cnameExcludeList = new ArrayList<>();
// cnameExcludeList.add("cname");
// configuration.setCustomCnameExcludeList(cnameExcludeList);
// Specify the host of the proxy server.
// configuration.setProxyHost("yourProxyHost");
// Specify the port of the proxy server.
// configuration.setProxyPort(8080);
// Specify the HTTP User-Agent header.
// configuration.setUserAgentMark("yourUserAgent");
// Specify whether to enable CRC-64. Default value: false.
// configuration.setCheckCRC64(true);
// Specify whether to enable HTTP redirection. Default value: false.
// configuration.setFollowRedirectsEnable(true);
// Set okHttpClient.
// OkHttpClient.Builder builder = new OkHttpClient.Builder();
// configuration.setOkHttpClient(builder.build());
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
configuration.setSignVersion(SignVersion.V4);
// Create an OSSClient instance.
OSSClient oss = new OSSClient(getApplicationContext(),endpoint, credentialProvider);
oss.setRegion(region);
ロギングを有効にする
モバイルデバイスは、様々な環境で使用される。 OSS SDK for Androidは、特定のリージョンまたは特定の期間に使用できない場合があります。 発生する可能性のある問題をトラブルシューティングするには、ログを有効にして、OSS SDK for Androidでローカルにログを記録できるようにします。 ロギングを有効にするには、まずOSSClientインスタンスを初期化する必要があります。 次のサンプルコードでは、ロギングを有効にする方法の例を示します。
// Specify the log style.
// Call OSSLog.enableLog() to enable logging. After logging is enabled, you can view logs in the OSS console.
// Write logs to the built-in SD card of the mobile phone in the following path: \OSSLog\logs.csv. By default, logs are not written to the path.
// Logs record the request data, response data, and exception information of OSS operations.
// Examples: the request ID and response headers.
// The following lines provide examples of log fields:
// The Android version.
// android_version: 5.1
// The Android mobile phone model.
// mobile_model: XT1085
// The network status.
// network_state: connected
// The type of the network connection.
// network_type: Wi-Fi
// The details of the operation.
// [2017-09-05 16:54:52] - Encounter local execpiton: //java.lang.IllegalArgumentException: The bucket name is invalid.
// A bucket name must:
// 1) be comprised of lower-case characters, numbers or dash(-);
// 2) start with lower case or numbers;
// 3) be between 3-63 characters long.
//------>end of log
// Call the following method to enable logging.
OSSLog.enableLog();
サーバーまたはSimple Log Serviceにログをアップロードできます。
同期および非同期API呼び出し
モバイル開発シナリオでは、UIスレッドでネットワーク操作を実行しないことをお勧めします。 OSS SDK for Androidは、アップロードおよびダウンロード操作の同期呼び出しと非同期呼び出しを提供します。 他のほとんどの操作では、非同期呼び出しが使用されます。
同期呼び出し
操作が同期的に呼び出された後、応答が返されるまで、コードの実行はリクエスト中にブロックされます。
UIスレッドで同期呼び出しを行うことはできません。
操作を同期的に呼び出すときに例外が発生すると、システムはClientExceptionまたはServiceException例外をスローします。 ClientException例外は、無効なネットワークパラメータなどのローカル例外です。 ServiceException例外は、認証の失敗やサーバーエラーなど、OSSによって返されるサービス例外です。
非同期呼び出し
非同期呼び出しに対してコールバック関数を設定する必要があります。 リクエストの実行結果はコールバックで処理されます。
非同期呼び出しで例外が発生した場合、例外はコールバック関数で処理されます。
非同期で操作を呼び出すと、関数はタスクを返します。
OSSAsyncTask task = oss.asyncGetObejct(...); task.cancel(); // Cancel the task. task.waitUntilFinished(); // Wait until the task is complete. GetObjectResult result=task.getResult(); // Obtain the task result.