OSSClient は、OSS サービス用の Android クライアントです。バケットとオブジェクトを管理するためのメソッドを提供します。SDK を使用して OSS にリクエストを送信する前に、OSSClient インスタンスを初期化し、その設定を行う必要があります。
OSSClient のライフサイクルは、アプリケーションのライフサイクルと一致させる必要があります。アプリケーションの起動時にグローバルな OSSClient を作成し、アプリケーションの終了時に OSSClient を破棄します。
OSSClient の初期化
モバイル端末は信頼できない環境です。AccessKeyId と AccessKeySecret を端末に直接保存してリクエストに署名すると、高いセキュリティ脅威をもたらします。Security Token Service (STS) 認証モードまたは自己署名モードを使用することを推奨します。
OSSClient は、次のいずれかの方法で作成できます。
アップロードやダウンロードなどの操作でインターフェイスを呼び出す方法については、「クイックスタート (Android SDK)」をご参照ください。
バケットを一覧表示するための OSSClient の初期化方法は、これらの例で示されている一般的な方法とは異なります。詳細については、「バケットの一覧表示 (Android SDK)」をご参照ください。
STS を使用した OSSClient の作成
次のコードは、STS を使用して OSSClient を作成する方法を示しています。
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
String endpoint = "yourEndpoint";
// STS サービスから取得した一時的な AccessKey ID と AccessKey Secret。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// STS サービスから取得したセキュリティトークン。
String securityToken = "yourSecurityToken";
// region を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// OSSClient インスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);カスタムドメイン名を使用した OSSClient の作成
次のコードは、カスタムドメイン名を使用して OSSClient を作成する方法を示しています。
// yourEndpoint をカスタムドメイン名に設定します。
String endpoint = "yourEndpoint";
// STS サービスから取得した一時的な AccessKey ID と AccessKey Secret。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// STS サービスから取得したセキュリティトークン。
String securityToken = "yourSecurityToken";
// region を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// OSSClient インスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);Apsara Stack または非公開ドメイン環境での OSSClient の作成
次のコードは、Apsara Stack または非公開ドメイン環境で OSSClient を作成する方法を示しています。
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。
String endpoint = "yourEndpoint";
// STS サービスから取得した一時的な AccessKey ID と AccessKey Secret。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// STS サービスから取得したセキュリティトークン。
String securityToken = "yourSecurityToken";
// region を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration configuration = new ClientConfiguration();
// CNAME 解析をスキップします。
List<String> excludeList = new ArrayList<>();
excludeList.add(endpoint);
configuration.setCustomCnameExcludeList(excludeList);
// OSSClient インスタンスを作成します。
configuration.setSignVersion(SignVersion.V4);
// OSSClient インstance を作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);OSSClient の設定
ClientConfiguration は OSSClient の設定クラスです。このクラスを使用して、プロキシ、接続タイムアウト、最大接続数などのパラメーターを設定できます。
パラメーター | 説明 | メソッド |
maxConcurrentRequest | 同時リクエストの最大数。デフォルト値:5。 | ClientConfiguration.setMaxConcurrentRequest |
socketTimeout | ソケットレイヤーでのデータ転送のタイムアウト期間 (ミリ秒)。デフォルト値:60000。 | ClientConfiguration.setSocketTimeout |
connectionTimeout | 接続確立のタイムアウト期間 (ミリ秒)。デフォルト値:60000。 | ClientConfiguration.setConnectionTimeout |
max_log_size | ログファイルのサイズ。デフォルト値:5 MB。 | ClientConfiguration.setMaxLogSize |
maxErrorRetry | リクエストが失敗した後の最大リトライ回数。デフォルト値:2。 | ClientConfiguration.setMaxErrorRetry |
customCnameExcludeList | リスト内の要素は、CNAME (Canonical Name) 解析をスキップします。 | ClientConfiguration.setCustomCnameExcludeList |
proxyHost | プロキシサーバーのホストアドレス。 | ClientConfiguration.setProxyHost |
proxyPort | プロキシサーバーのポート。 | ClientConfiguration.setProxyPort |
mUserAgentMark | ユーザーエージェント内の HTTP の User-Agent ヘッダー。 | ClientConfiguration.setUserAgentMark |
httpDnsEnable | HTTPDNS を有効にするかどうかを指定します。
| ClientConfiguration.setHttpDnsEnable |
checkCRC64 | 64 ビット巡回冗長検査 (CRC-64) を有効にするかどうかを指定します。有効な値:
| ClientConfiguration.setCheckCRC64 |
followRedirectsEnable | HTTP リダイレクトを有効にするかどうかを指定します。有効な値:
| ClientConfiguration.setFollowRedirectsEnable |
okHttpClient | カスタム okHttpClient。 | ClientConfiguration.setOkHttpClient |
次のコードは、ClientConfiguration を使用して OSSClient パラメーターを設定する方法を示しています。
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
String endpoint = "yourEndpoint";
// STS サービスから取得した一時的な AccessKey ID と AccessKey Secret。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// STS サービスから取得したセキュリティトークン。
String securityToken = "yourSecurityToken";
// region を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "yourRegion";
ClientConfiguration configuration = new ClientConfiguration();
// 同時リクエストの最大数を設定します。デフォルト値:5。
// configuration.setMaxConcurrentRequest(3);
// ソケットレイヤーでのデータ転送のタイムアウト期間を設定します。デフォルト値:60 秒。
// configuration.setSocketTimeout(50000);
// 接続確立のタイムアウト期間を設定します。デフォルト値:60 秒。
// configuration.setConnectionTimeout(50000);
// ログファイルのサイズを設定します。デフォルト値:5 MB。
// configuration.setMaxLogSize(3 * 1024 * 1024);
// リクエストが失敗した後の最大リトライ回数を設定します。デフォルト値:2。
// configuration.setMaxErrorRetry(3);
// リスト内の要素は CNAME 解析をスキップします。
// List<String> cnameExcludeList = new ArrayList<>();
// cnameExcludeList.add("cname");
// configuration.setCustomCnameExcludeList(cnameExcludeList);
// プロキシサーバーのホストアドレス。
// configuration.setProxyHost("yourProxyHost");
// プロキシサーバーのポート。
// configuration.setProxyPort(8080);
// ユーザーエージェント内の HTTP の User-Agent ヘッダー。
// configuration.setUserAgentMark("yourUserAgent");
// 巡回冗長検査 (CRC) を有効にするかどうかを指定します。デフォルト値:false。
// configuration.setCheckCRC64(true);
// HTTP リダイレクトを有効にするかどうかを指定します。デフォルト値:false。
// configuration.setFollowRedirectsEnable(true);
// カスタム OkHttpClient を設定します。
// OkHttpClient.Builder builder = new OkHttpClient.Builder();
// configuration.setOkHttpClient(builder.build());
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
configuration.setSignVersion(SignVersion.V4);
// OSSClient インスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);ログ記録の有効化
モバイル端末の環境は複雑です。OSS SDK は、一部のリージョンや特定の期間に正しく動作しない場合があります。開発者が問題を特定しやすくするために、OSS SDK はログ記録機能が有効になった後、ログ情報をローカルに記録します。ログ記録を有効にするには、OSSClient を使用する前に初期化する必要があります。次のようにメソッドを呼び出します。
// ログスタイル。
// OSSLog.enableLog() を呼び出して、コンソールでログを表示できるようにします。
// ログファイルを携帯電話の内蔵 SD カードの \OSSLog\logs.csv パスに書き込むことができます。これはデフォルトで無効になっています。
// ログには、OSS 操作のリクエストデータ、レスポンスデータ、例外情報が記録されます。
// たとえば、requestId やレスポンスヘッダーなどです。
// 以下はログレコードのサンプルです。
// Android バージョン。
// android_version: 5.1
// Android 携帯電話のモデル。
// mobile_model: XT1085
// ネットワークステータス。
// network_state: connected
// ネットワーク接続タイプ。
// network_type: WIFI
// 特定の操作動作情報。
// [2017-09-05 16:54:52] - Encounter local execpiton: //java.lang.IllegalArgumentException: The bucket name is invalid.
// バケット名は次の要件を満たす必要があります:
// 1) 小文字、数字、またはダッシュ (-) で構成されていること。
// 2) 小文字または数字で始まること。
// 3) 長さが 3 ~ 63 文字であること。
//------>ログの終わり
// このメソッドを呼び出してログ記録を有効にします。
OSSLog.enableLog(); ファイルをサーバーにアップロードするか、Alibaba Cloud Simple Log Service を使用してログファイルをアップロードできます。
同期インターフェイスと非同期インターフェイス
Android SDK は、アップロードおよびダウンロードインターフェイス用に、同期呼び出しと非同期呼び出しの両方の例を提供します。これは、モバイルアプリケーション開発では UI スレッドでのネットワークリクエストが許可されていないためです。他のインターフェイスについては、主に非同期呼び出しの例が提供されています。
同期呼び出し
同期インターフェイスの呼び出しは、結果が返されるまでスレッドをブロックします。
UI スレッドで同期インターフェイスを呼び出さないでください。
同期インターフェイスの呼び出し中に例外が発生すると、ClientException または ServiceException が直接スローされます。ClientException は、ネットワーク接続の問題や無効なパラメーターなどのローカル例外を示します。ServiceException は、認証失敗やサーバーエラーなど、OSS から返されたサービスエラーを示します。
非同期呼び出し
非同期インターフェイスの場合、リクエストを行うときにコールバック関数を渡します。リクエストの結果はコールバックで処理されます。
非同期リクエスト中に例外が発生した場合、例外はコールバック関数で処理されます。
非同期インターフェイスを呼び出すと、直接 Task が返されます。
OSSAsyncTask task = oss.asyncGetObejct(...); task.cancel(); // タスクをキャンセルします。 task.waitUntilFinished(); // タスクが完了するまで待機します。 GetObjectResult result = task.getResult(); // スレッドをブロックして結果を待機します。