OSSクライアントは、OSSのiOSクライアントです。バケットとオブジェクトを操作および管理するための一連のメソッドを呼び出し元に提供します。OSS Android SDKを使用してOSSへのリクエストを開始する前に、まずOSSClientインスタンスを初期化し、必要な設定を完了する必要があります。
OSSクライアントのライフサイクルがアプリケーションのライフサイクルと一貫していることを確認する。アプリケーションの起動時にOSSクライアントを作成し、アプリケーションが終了したらOSSクライアントを破棄する。
エンドポイントを特定する
エンドポイントは、リージョンの中のアリババクラウドOSSのアドレスであります。現在、2つの形式をサポートしています。
エンドポイントタイプ | 説明 |
---|---|
OSS リージョンアドレス | OSS バケット位置しているリージョンのアドレスです。詳細はここ をクリックしてください。 |
ユーザー定義のドメイン名 | ユーザが定義したドメイン名。CNAMEはOSSドメイン名に向かいます。 |
ここをクリックすると、エンドポイントに関する詳細情報が表示されます。
OSS リージョンアドレス
次の 2 つの方法のいずれかを使用して、OSS バケットが存在するリージョンのアドレスにマッピングされたエンドポイントを検索できます。
- エンドポイントとリージョンの間のマッピング関係を照会できます。詳細については、OSS アクセスドメイン名をクリックして詳細を表示してください。
- Alibaba Cloud OSS コンソールにログオンして [Bucket Overview] ページを開き、バケットドメインのサフィックスを見つけます。たとえば、バケットドメイン
bucket-1.oss-cn-hangzhou.aliyuncs.com
のサフィックスoss-cn-hangzhou.aliyuncs.com
がインターネット上のバケットのエンドポイントです。
CNAME
CNAME を使用してドメインをバケットにバインドし、ドメインを使用してバケット内のオブジェクトにアクセスできます。
たとえば、new-image.xxxxx.com ドメインを Shenzhen の image という名前のバケットにバインドする必要がある場合、以下を実行します。xxxxx.com のドメインホスティングプロバイダーに問い合わせ、http://new-image.xxxxx.com
を http://image.oss-cn-shenzhen.aliyuncs.com
に解決するために使用する新しいドメイン名解決レコードを設定します。レコードタイプは CNAME です。
エンドポイントと秘密鍵証明書を構成する
モバイルデバイスは信頼できない環境です。要求に署名するためにAccessKeyId
とAccessKeySecret
をモバイルデバイスに格納しないでください。テスト目的でプレーンテキスト設定のみを使用することをお勧めします。ビジネスアプリケーションには、STS認証モードまたは自己署名モードが推奨されます。詳細については、アクセス制御およびDirect Transfer on a Mobile Deviceを参照してください。EndPointとCredentialProviderの設定の例は次のとおりです。
STS認証モードを使用している場合は、期限切れのトークンを自動的に更新するため、OSSAuthCredentialProviderを使用してアプリケーションサーバーにアクセスすることをお勧めします。
詳細については、こちらをクリックしてください。
EndPointとCredentialProviderを設定する方法の例を次に示します。
NSString *endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
//Access the authentication server directly (we recommended you use this access method because expired tokens are updated automatically).
id<OSSCredentialProvider> credential = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"An example of an authentication server address is http://abc.com."];
client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];
注意: 認証モードの詳細については、アクセス制御を参照してください。
CNAMEでエンドポイントを設定する
CNAMEをバインドしている場合はバケットには、CNAMEでエンドポイントを設定することができます。例えば:
NSString *endpoint = "http://new-image.xxxxx.com";
...
client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
注意: アップルはATS標準のサポートを実装した後、すべての
endpoint
URLはHTTPS URLである必要です。CNAME
は現在のクレデンシャル設定をサポートしていませんので、CNAMEでEndpoint
を設定することはできません。vモバイルデバイス上のアプリケーション環境は比較的複雑です。OSS SDKは、一部の地域または一定期間、正常に動作しないことがあります。開発者が問題を突き止めるのを助けるために、OSS SDKは、ロギング機能が有効になっているときに、ローカルデバイスにいくつかのログ情報を記録します。ロギングを有効にするには、使用する前にOSSClientを初期化します。次の方法を使用できます。
注意:
- ログファイルは、サンドボックス内のCaches/OSSLogsフォルダに格納されます。
- 問題をさらに追跡するために、ログファイルをサーバーにアップロードすることができます。
- Alibaba Cloud Log Service(SLS)にアクセスしてログファイルをアップロードすることもできます。
//Log formats
//2017/10/25 11:05:43:863 [Debug]: The 17th attempt: <NSThread: 0x7f8099108580>{number = 3, name = (null)}
//2017/10/25 11:05:43:863 [Debug]: The 15th attempt: <NSThread: 0x7f80976052c0>
//2017/10/25 11:05:43:863 [Debug]: ----------TestDebug------------
[OSSLog enableLog];//Run the method to enable logging
ネットワークパラメータを設定する
次のように、初期化プロセス中に詳細なClientConfigurationを設定できます。
NSString *endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
//Access the authentication server directly (we recommended you use this access method because expired tokens are updated automatically).
id<OSSCredentialProvider> credential = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"An example of an authentication server address is http://abc.com."];
client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];
OSSClientConfiguration * conf = [OSSClientConfiguration new];
conf.maxRetryCount = 3; // The maximum number of retry attempts after a failed network request due to an exception
conf.timeoutIntervalForRequest = 30; // Time-out value of the network requests
conf.timeoutIntervalForResource = 24 * 60 * 60; // The longest time allowed for the resource transmission
client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential clientConfiguration:conf];
OSSTask
APIを呼び出す操作では、次のようにOSSTaskが返されます。
OSSTask * task = [client getObject:get];
非同期コールバックを実装するには、次のようにタスクの継続を設定できます。
[task continueWithBlock: ^(OSSTask *task) {
// do something
...
return nil;
}];
タスクが次のように終了するのを待つこともできます。
[task waitUntilFinished];