Ich richte OAuth für meine Android-App ein. Um es zu testen, habe ich Folgendes getan: Added signpost-core-1.2.1.1.jar und signpost-commonshttp4-1.2.1.1.jar zu meinem Projekt hinzugefügt die Variablen "CommonsHttpOAuthConsumer Verbraucher" und "CommonsHttpOAuthProvider Anbieter" und tat folgendes wenn die Schaltfläche geklickt wird:Android OAuth: Ausnahme bei 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() führt folgendes aus:
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) { }
}
der Verbraucher und der Anbieter So werden gespeichert, bevor der Browser geöffnet wird, wie here beschrieben.
Im onResume() -Methode laden ich die Provider- und Consumer-Daten und wie folgt vorgehen:
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();
}
}
}
Also, was funktioniert: 1) bekomme ich tun, um eine requestToken und requestSecret. 2) Ich bekomme die OAUTHURl. 3) Ich bin auf die Browser-Seite gerichtet, um meine App zu autorisieren 4) Ich werde auf meine App umgeleitet. 5) Ich bekomme den Verifizierer. Der Aufruf von retrieveAccessToken (consumer, verifier) schlägt jedoch mit einer OAuthCommunicationException fehl, die besagt "Kommunikation mit dem Service Provider ist fehlgeschlagen: null".
Weiß jemand, was der Grund sein könnte? Einige Leute haben Probleme, den requestToken zu bekommen, aber das funktioniert einfach. Ich frage mich, ob es ein Problem sein könnte, dass meine App auch die Apache-Mime4j-0.6.jar und httpmime-4.0.1.jar enthalten, die ich für Multipart-Upload benötige.
vielen Dank ... das ist mein Problem gelöst ... großartige Arbeit Manuel – Panache
Also in Ihrem Fall des 'requestToken', das Sie in' consumer.setOkenWithSecret' gesetzt haben, ist 'oauthUrl'? und darf ich fragen, was ist das TokenSecret? Danke :) – dumbfingers
Entschuldigung, ich denke, ich kann es herausfinden, ist das 'requestToken' abgerufen mit' consumer.getToken() '? – dumbfingers