OSSClient est le client Android pour le service OSS. Il fournit des méthodes de gestion des buckets et des objets. Avant d'utiliser le kit de développement logiciel (SDK) pour envoyer des requêtes à OSS, vous devez initialiser une instance OSSClient et configurer ses paramètres.
Le cycle de vie de l'OSSClient doit correspondre à celui de l'application. Créez un OSSClient global au démarrage de l'application et détruisez-le à la fin de celle-ci.
Initialisation de l'OSSClient
Un terminal mobile constitue un environnement non fiable. Stocker directement sur le terminal l'AccessKeyId et l'AccessKeySecret pour signer les requêtes présente un risque élevé pour la sécurité. Nous vous recommandons d'utiliser le mode d'authentification STS (Security Token Service) ou le mode autosigné.
Les identifiants temporaires STS peuvent être extraits après leur réception sur le client mobile. Vous devez donc les restreindre davantage en appliquant une politique RAM qui limite les autorisations à un seul utilisateur, associée à une courte période de validité. Pour les scénarios impliquant des données sensibles telles que les cartes d'identité, les images faciales ou les informations de paiement, faites générer une URL présignée par votre serveur d'application ; l'application mobile elle-même ne doit jamais détenir d'identifiant. Pour choisir le fournisseur d'identifiants approprié, consultez la rubrique Configurer les identifiants d'accès (SDK Android). Pour les URL présignées, reportez-vous à la section Autoriser l'accès (SDK Android).
Créez un OSSClient selon l'une des méthodes suivantes.
Pour savoir comment appeler les interfaces pour des opérations telles que les téléchargements et les téléversements, consultez la rubrique Démarrage rapide (SDK Android).
La méthode d'initialisation de l'OSSClient pour lister les buckets diffère de la méthode générale présentée dans ces exemples. Pour plus d'informations, consultez la rubrique Lister les buckets (SDK Android).
Création d'un OSSClient à l'aide de STS
Le code suivant montre comment créer un OSSClient à l'aide de STS.
// Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// The temporary AccessKey ID and AccessKey secret obtained from the STS service.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// The security token obtained from the STS service.
String securityToken = "yourSecurityToken";
// Set region to the region where the bucket is located. For example, if the bucket is 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);
Création d'un OSSClient à l'aide d'un nom de domaine personnalisé
Le code suivant montre comment créer un OSSClient à l'aide d'un nom de domaine personnalisé.
// Set yourEndpoint to the custom domain name.
String endpoint = "yourEndpoint";
// The temporary AccessKey ID and AccessKey secret obtained from the STS service.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// The security token obtained from the STS service.
String securityToken = "yourSecurityToken";
// Set region to the region where the bucket is located. For example, if the bucket is 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);
Création d'un OSSClient dans un environnement Apsara Stack ou avec un domaine privé
Le code suivant montre comment créer un OSSClient dans un environnement Apsara Stack ou avec un domaine privé.
// Set yourEndpoint to the Endpoint of the region where the bucket is located.
String endpoint = "yourEndpoint";
// The temporary AccessKey ID and AccessKey secret obtained from the STS service.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// The security token obtained from the STS service.
String securityToken = "yourSecurityToken";
// Set region to the region where the bucket is located. For example, if the bucket is 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 parsing.
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);
Configuration de l'OSSClient
ClientConfiguration est la classe de configuration de l'OSSClient. Elle permet de définir divers paramètres tels que le proxy, le délai de connexion et le nombre maximal de connexions.
|
Paramètre |
Description |
Méthode |
|
maxConcurrentRequest |
Nombre maximal de requêtes simultanées. Valeur par défaut : 5. |
ClientConfiguration.setMaxConcurrentRequest |
|
socketTimeout |
Délai d'expiration pour la transmission des données au niveau du socket, en millisecondes. Valeur par défaut : 60000. |
ClientConfiguration.setSocketTimeout |
|
connectionTimeout |
Délai d'expiration pour l'établissement d'une connexion, en millisecondes. Valeur par défaut : 60000. |
ClientConfiguration.setConnectionTimeout |
|
max_log_size |
Taille du fichier journal. Valeur par défaut : 5 Mo. |
ClientConfiguration.setMaxLogSize |
|
maxErrorRetry |
Nombre maximal de tentatives après l'échec d'une requête. Valeur par défaut : 2. |
ClientConfiguration.setMaxErrorRetry |
|
customCnameExcludeList |
Les éléments de cette liste ignorent l'analyse du nom canonique (CNAME). |
ClientConfiguration.setCustomCnameExcludeList |
|
proxyHost |
Adresse hôte du serveur proxy. |
ClientConfiguration.setProxyHost |
|
proxyPort |
Port du serveur proxy. |
ClientConfiguration.setProxyPort |
|
mUserAgentMark |
En-tête User-Agent HTTP dans l'agent utilisateur. |
ClientConfiguration.setUserAgentMark |
|
httpDnsEnable |
Indique si HTTPDNS est activé.
|
ClientConfiguration.setHttpDnsEnable |
|
checkCRC64 |
Indique si la vérification de redondance cyclique 64 bits (CRC-64) est activée. Valeurs possibles :
|
ClientConfiguration.setCheckCRC64 |
|
followRedirectsEnable |
Indique si la redirection HTTP est activée. Valeurs possibles :
|
ClientConfiguration.setFollowRedirectsEnable |
|
okHttpClient |
okHttpClient personnalisé. |
ClientConfiguration.setOkHttpClient |
Le code suivant illustre l'utilisation de ClientConfiguration pour configurer les paramètres de l'OSSClient.
// Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// The temporary AccessKey ID and AccessKey secret obtained from the STS service.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// The security token obtained from the STS service.
String securityToken = "yourSecurityToken";
// Set region to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
String region = "yourRegion";
ClientConfiguration configuration = new ClientConfiguration();
// Set the maximum number of concurrent requests. Default value: 5.
// configuration.setMaxConcurrentRequest(3);
// Set the timeout period for data transmission at the socket layer. Default value: 60s.
// configuration.setSocketTimeout(50000);
// Set the timeout period for establishing a connection. Default value: 60s.
// configuration.setConnectionTimeout(50000);
// Set the size of the log file. Default value: 5 MB.
// configuration.setMaxLogSize(3 * 1024 * 1024);
// Set the maximum number of retries after a request fails. Default value: 2.
// configuration.setMaxErrorRetry(3);
// Elements in the list will skip CNAME parsing.
// List<String> cnameExcludeList = new ArrayList<>();
// cnameExcludeList.add("cname");
// configuration.setCustomCnameExcludeList(cnameExcludeList);
// The host address of the proxy server.
// configuration.setProxyHost("yourProxyHost");
// The port of the proxy server.
// configuration.setProxyPort(8080);
// The User-Agent header of HTTP in the user agent.
// configuration.setUserAgentMark("yourUserAgent");
// Specifies whether to enable cyclic redundancy check (CRC). Default value: false.
// configuration.setCheckCRC64(true);
// Specifies whether to enable HTTP redirection. Default value: false.
// configuration.setFollowRedirectsEnable(true);
// Set a custom 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);
Activation de la journalisation
L'environnement des terminaux mobiles est complexe. Le SDK OSS peut ne pas fonctionner correctement dans certaines régions ou à certains moments. Pour aider les développeurs à identifier les problèmes, le SDK OSS enregistre localement les informations de journalisation lorsque la fonctionnalité de journalisation est activée. Initialisez cette fonctionnalité avant d'utiliser l'OSSClient. Appelez la méthode comme suit.
// Log style.
// Call OSSLog.enableLog() to enable viewing logs in the console.
// You can write log files to the \OSSLog\logs.csv path on the phone's built-in SD card. This is disabled by default.
// Logs record request data, response data, and exception information for OSS operations.
// For example, requestId and response header.
// The following is a sample log record.
// Android version.
// android_version: 5.1
// Android phone model.
// mobile_model: XT1085
// Network status.
// network_state: connected
// Network connection type.
// network_type: WIFI
// Specific operation behavior information.
// [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 this method to enable logging.
OSSLog.enableLog();
Vous pouvez téléverser les fichiers vers votre serveur ou utiliser Alibaba Cloud Simple Log Service pour téléverser les fichiers journaux.
Interfaces synchrones et asynchrones
Le SDK Android propose des exemples d'appels synchrones et asynchrones pour les interfaces de téléversement et de téléchargement. Cette distinction s'explique par l'interdiction d'effectuer des requêtes réseau dans le thread d'interface utilisateur lors du développement d'applications mobiles. Pour les autres interfaces, les exemples fournis privilégient les appels asynchrones.
-
Appel synchrone
Un appel d'interface synchrone bloque le thread jusqu'au renvoi d'un résultat.
N'appelez pas d'interfaces synchrones dans le thread d'interface utilisateur.
Lorsqu'une exception se produit lors d'un appel d'interface synchrone, une ClientException ou une ServiceException est directement levée. Une ClientException indique une exception locale, telle qu'un problème de connectivité réseau ou un paramètre invalide. Une ServiceException signale une erreur de service renvoyée par OSS, comme un échec d'authentification ou une erreur serveur.
-
Appel asynchrone
Pour une interface asynchrone, transmettez une fonction de rappel lors de la requête. Le résultat de la requête est traité dans ce rappel.
Lorsqu'une exception survient lors d'une requête asynchrone, elle est gérée dans la fonction de rappel.
-
L'appel d'une interface asynchrone renvoie directement une Task.
OSSAsyncTask task = oss.asyncGetObejct(...); task.cancel(); // Cancel the task. task.waitUntilFinished(); // Wait until the task is complete. GetObjectResult result = task.getResult(); // Block the thread and wait for the result.