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

Object Storage Service:初期化 (Android SDK)

最終更新日:Nov 30, 2025

OSSClient は、OSS サービス用の Android クライアントです。バケットとオブジェクトを管理するためのメソッドを提供します。SDK を使用して OSS にリクエストを送信する前に、OSSClient インスタンスを初期化し、その設定を行う必要があります。

説明

OSSClient のライフサイクルは、アプリケーションのライフサイクルと一致させる必要があります。アプリケーションの起動時にグローバルな OSSClient を作成し、アプリケーションの終了時に OSSClient を破棄します。

OSSClient の初期化

重要

モバイル端末は信頼できない環境です。AccessKeyIdAccessKeySecret を端末に直接保存してリクエストに署名すると、高いセキュリティ脅威をもたらします。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 を有効にするかどうかを指定します。

  • true:バージョン 2.9.12 より前のバージョンでは、HTTPDNS はデフォルトで有効になっています。

  • false:バージョン 2.9.12 以降では、HTTPDNS はデフォルトで無効になっています。

ClientConfiguration.setHttpDnsEnable

checkCRC64

64 ビット巡回冗長検査 (CRC-64) を有効にするかどうかを指定します。有効な値:

  • true:CRC-64 を有効にします。

  • false (デフォルト):CRC-64 を無効にします。

ClientConfiguration.setCheckCRC64

followRedirectsEnable

HTTP リダイレクトを有効にするかどうかを指定します。有効な値:

  • true:HTTP リダイレクトを有効にします。

  • false (デフォルト):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(); // スレッドをブロックして結果を待機します。