OSSClient は、OSS サービス用の Android クライアントです。バケットおよびオブジェクトを管理するためのメソッドを提供します。ソフトウェア開発キット (SDK) を使用して OSS にリクエストを送信する前に、OSSClient インスタンスを初期化し、その設定を行う必要があります。
OSSClient のライフサイクルは、アプリケーションのライフサイクルと一致させる必要があります。アプリケーションの起動時にグローバル OSSClient を作成し、アプリケーションの終了時に OSSClient を破棄します。
OSSClient の初期化
モバイル端末は信頼できない環境です。リクエストに署名するために AccessKeyId と AccessKeySecret を端末に直接保存することは、高いセキュリティ上の脅威となります。Security Token Service (STS) 認証モードまたは自己署名モードを使用することを推奨します。
STS の一時的な認証情報でさえ、モバイルクライアント上で抽出される可能性があるため、単一ユーザーに権限範囲を限定した RAM ポリシーと短い有効期間によって、さらに制約する必要があります。IDカード、顔画像、支払い認証情報などの機密性の高いデータを含むシナリオでは、アプリケーションサーバーでモバイルアプリが使用する署名付き URL を生成してください。モバイルアプリ自体は認証情報を保持しません。認証情報プロバイダーの選択については、アクセス認証情報の設定 (Android SDK) をご参照ください。署名付き URL については、アクセスの承認 (Android SDK) をご参照ください。
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 をバケットが存在するリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、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 をバケットが存在するリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、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 をバケットが存在するリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、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 インスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, configuration);
oss.setRegion(region);
OSSClient の設定
ClientConfiguration は、OSSClient の設定クラスです。このクラスを使用して、プロキシ、接続タイムアウト、最大接続数などのパラメータを設定できます。
|
パラメータ |
説明 |
メソッド |
|
maxConcurrentRequest |
最大同時リクエスト数。デフォルト値:5。 |
ClientConfiguration.setMaxConcurrentRequest |
|
socketTimeout |
ソケットレイヤーでのデータ転送のタイムアウト期間 (ミリ秒単位)。デフォルト値:60000。 |
ClientConfiguration.setSocketTimeout |
|
connectionTimeout |
接続タイムアウト期間 (ミリ秒単位)。デフォルト値:60000。 |
ClientConfiguration.setConnectionTimeout |
|
maxLogSize |
ログファイルのサイズ。デフォルト値:5 MB。 |
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 |
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 をバケットが存在するリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、region を cn-hangzhou に設定します。
String region = "yourRegion";
ClientConfiguration configuration = new ClientConfiguration();
// 最大同時リクエスト数を設定します。デフォルト値: 5。
// configuration.setMaxConcurrentRequest(3);
// ソケットレイヤーでのデータ転送のタイムアウト期間を設定します。デフォルト値: 60000。
// configuration.setSocketTimeout(50000);
// 接続を確立するためのタイムアウト期間を設定します。デフォルト値: 60000。
// 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, configuration);
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 exception: //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
// このメソッドを呼び出してロギングを有効にします。
OSSLog.enableLog();
ファイルをサーバーにアップロードするか、Alibaba Cloud Simple Log Service を使用してログファイルをアップロードできます。
同期インターフェイスと非同期インターフェイス
Android SDK では、アップロードおよびダウンロードのインターフェイスで、同期呼び出しと非同期呼び出しの両方の例を提供しています。これは、モバイルアプリケーション開発では UI スレッドでのネットワークリクエストが許可されていないためです。他のインターフェイスについては、主に非同期呼び出しの例が提供されています。
-
同期呼び出し
-
同期インターフェイス呼び出しは、結果が返されるまでスレッドをブロックします。
-
UI スレッドで同期インターフェイスを呼び出さないでください。
-
同期インターフェイスの呼び出し中に例外が発生すると、ClientException または ServiceException が直接スローされます。ClientException は、ネットワーク接続の問題や無効なパラメータといったローカル例外を示します。ServiceException は、認証失敗やサービスエラーといった、OSS から返されるサービスエラーを示します。
-
-
非同期呼び出し
-
非同期インターフェイスの場合、リクエストを行う際にコールバック関数を渡します。リクエスト結果はコールバックで処理されます。
-
非同期リクエスト中に例外が発生した場合、例外はコールバック関数で処理されます。
-
非同期インターフェイスを直接呼び出すと、Task が返されます。
OSSAsyncTask task = oss.asyncGetObject(...); task.cancel(); // タスクをキャンセルします。 task.waitUntilFinished(); // タスクが完了するまで待機します。 GetObjectResult result = task.getResult(); // スレッドをブロックして結果を待ちます。
-