Je configure OAuth pour mon application Android. Pour le tester, j'ai fait ce qui suit: Ajout de signpost-core-1.2.1.1.jar et de signpost-commonshttp4-1.2.1.1.jar à mon projet, ajout des variables "CommonsHttpOAuthConsumer consumer" et "CommonsHttpOAuthProvider provider" et fait ce qui suit quand clique sur le bouton:Android OAuth: Exception sur retrieveAccessToken()
consumer = new CommonsHttpOAuthConsumer("xxx", "yyy");
provider = new CommonsHttpOAuthProvider("https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize");
oauthUrl = provider.retrieveRequestToken(consumer, "myapp://twitterOauth");
persistOAuthData();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(oauthUrl)));
persistOAuthData() effectue les opérations suivantes:
protected void persistOAuthData()
{
try
{
FileOutputStream providerFOS = this.openFileOutput("provider.dat", MODE_PRIVATE);
ObjectOutputStream providerOOS = new ObjectOutputStream(providerFOS);
providerOOS.writeObject(this.provider);
providerOOS.close();
FileOutputStream consumerFOS = this.openFileOutput("consumer.dat", MODE_PRIVATE);
ObjectOutputStream consumerOOS = new ObjectOutputStream(consumerFOS);
consumerOOS.writeObject(this.consumer);
consumerOOS.close();
}
catch (Exception e) { }
}
Ainsi, le consommateur et le fournisseur sont enregistrés avant d'ouvrir le navigateur, comme décrit here.
Dans la méthode onResume() je charge le fournisseur et consommateur de données et procédez comme suit:
Uri uri = this.getIntent().getData();
if (uri != null && uri.getScheme().equals("myapp") && uri.getHost().equals("twitterOauth"))
{
verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
if (!verifier.equals(""))
{
loadOauthData();
try
{
provider.retrieveAccessToken(consumer, verifier);
}
catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
}
}
}
Alors, ce qui fonctionne: 1) Je reçois un requestToken et un requestSecret. 2) Je reçois le fichier oauthUrl. 3) Je suis dirigé vers la page du navigateur pour autoriser mon application 4) Je suis redirigé vers mon application. 5) Je reçois le vérificateur. Toutefois, l'appel à retrieveAccessToken (consommateur, vérificateur) échoue avec une exception OAuthCommunicationException indiquant que la communication avec le fournisseur de services a échoué: null.
Est-ce que quelqu'un sait quelle pourrait être la raison? Certaines personnes semblent avoir des problèmes pour obtenir le requestToken, mais cela fonctionne bien. Je me demande si cela pourrait être un problème que mon application a également inclus le apache-mime4j-0.6.jar et httpmime-4.0.1.jar dont j'ai besoin pour le téléchargement en plusieurs parties.
merci beaucoup ... ce a résolu mon problème ... excellent travail Manuel – Panache
Donc, dans votre cas, la 'requestToken' vous définissez dans' consumer.setOkenWithSecret' est 'oauthUrl'? et puis-je demander quel est le 'tokenSecret'? Merci :) – dumbfingers
Désolé, je pense que je peux comprendre, est le 'requestToken' récupéré en utilisant' consumer.getToken() '? – dumbfingers