Sto configurando OAuth per la mia app per Android. Per testarlo ho fatto quanto segue: Aggiunto signpost-core-1.2.1.1.jar e signpost-commonshttp4-1.2.1.1.jar al mio progetto, aggiunto le variabili "CommonsHttpOAuthConsumer consumer" e "CommonsHttpOAuthProvider provider" e ho fatto quanto segue quando il pulsante viene premuto:Android OAuth: Eccezione su 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() effettua le seguenti operazioni:
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) { }
}
Così, il consumatore e il fornitore vengono salvati prima di aprire il browser, come descritto here.
Nel metodo onResume() ho caricare i dati del provider e dei consumatori e procedere come segue:
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();
}
}
}
Allora, che cosa funziona: 1) io capisco un requestToken e requestSecret. 2) Ottengo l'oauthUrl. 3) Sono indirizzato alla pagina del browser per autorizzare la mia app 4) Mi viene reindirizzato alla mia app. 5) Ottengo il verificatore. Ma chiamare retrieveAccessToken (consumer, verificatore) non riesce con una OAuthCommunicationException che dice "Comunicazione con il provider di servizi fallita: null".
Qualcuno sa quale potrebbe essere la ragione? Alcune persone sembrano avere problemi nel ricevere la richiesta, ma funziona perfettamente. Mi chiedo se potrebbe essere un problema che la mia app abbia incluso anche apache-mime4j-0.6.jar e httpmime-4.0.1.jar di cui ho bisogno per il caricamento multipart.
Grazie mille ... questo risolto il mio problema ... grande opera Manuel – Panache
Quindi nel tuo caso, il 'requestToken' che hai impostato in' consumer.setOkenWithSecret' è 'oauthUrl'? e posso chiedere qual è il 'tokenSecret'? Grazie :) – dumbfingers
Scusa, penso di aver capito, è il 'requestToken' recuperato usando' consumer.getToken() '? – dumbfingers