Problem mit OAuth, Twitter und Android: fehl http-Kommunikation mit dem server
Hat jemand ein funktionierendes Beispiel für die OAuth-Authentifizierung bei twitter mit Android? Ich habe versucht, beide zu verwenden Twitter4J und Wegweiser, aber ich bekomme sehr merkwürdige Fehler, nämlich twitter.com ist ein unbekannter host. Ich habe understod, dass es ein problem gibt (unter Google Android) mit dem Wegweiser-Bibliothek und Android und nach dem Projekt home-page, die CommonsHttpOAuth* Klassen arbeiten soll.
Hier ist mein Wegweiser:
private void getReqTokenAndAuthenticateUsingSignPost() {
String callbackUrl = "twitter-test:///";
CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY,
CONSUMER_SECRET);
CommonsHttpOAuthProvider provider = new CommonsHttpOAuthProvider(
"http://twitter.com/oauth/request_token", "http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize");
String tokenStr = consumer.getToken();
String tokenSecretStr = consumer.getTokenSecret();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = preferences.edit();
edit.putString(REQ_TOKEN, tokenStr);
edit.putString(REQ_TOKEN_SECRET, tokenSecretStr);
try {
String authUrl = provider.retrieveRequestToken(consumer, callbackUrl);
Uri authenticationUri = Uri.parse(authUrl);
startActivity(new Intent(Intent.ACTION_VIEW, authenticationUri));
} catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
}
}
und hier ist mein code für Twitter4J:
private void getReqTokenAndAuthenticateUsingTwitter4J() {
String callbackUrl = "twitter-test:///";
try {
//Prepare a request token, based on consumer key and consumer
//secret
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(CONSUMER_KEY);
builder.setOAuthConsumerSecret(CONSUMER_SECRET);
Configuration cfg = builder.build();
Twitter t = new TwitterFactory(cfg).getInstance();
RequestToken requestToken = t.getOAuthRequestToken(callbackUrl);
String tokenStr = requestToken.getToken();
String tokenSecretStr = requestToken.getTokenSecret();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = preferences.edit();
edit.putString(REQ_TOKEN, tokenStr);
edit.putString(REQ_TOKEN_SECRET, tokenSecretStr);
if (edit.commit()) {
//Launch the browser for authentication in twitter's web-gui
Uri authenticationUri = Uri.parse(requestToken.getAuthenticationURL());
startActivity(new Intent(Intent.ACTION_VIEW, authenticationUri));
}
} catch (TwitterException e) {
e.printStackTrace();
}
}
und ja, ich habe eine manifest-Datei mit der Internet-Berechtigung und einen intent-filter für die callback-url. Hier ist die Ausgabe von logcat beim ausführen des Wegweiser-code:
W/System.err( 779): oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: twitter.com
W/System.err( 779): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:214)
W/System.err( 779): at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69)
W/System.err( 779): at com.examples.twitterimages.TwitterImagesActivity.getReqTokenAndAuthenticateUsingSignPost(TwitterImagesActivity.java:109)
W/System.err( 779): at com.examples.twitterimages.TwitterImagesActivity.onCreate(TwitterImagesActivity.java:64)
W/System.err( 779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
W/System.err( 779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
W/System.err( 779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
W/System.err( 779): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
W/System.err( 779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
W/System.err( 779): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 779): at android.os.Looper.loop(Looper.java:123)
W/System.err( 779): at android.app.ActivityThread.main(ActivityThread.java:3701)
W/System.err( 779): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 779): at java.lang.reflect.Method.invoke(Method.java:507)
W/System.err( 779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
W/System.err( 779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
W/System.err( 779): at dalvik.system.NativeStart.main(Native Method)
W/System.err( 779): Caused by: java.net.UnknownHostException: twitter.com
W/System.err( 779): at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
W/System.err( 779): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
W/System.err( 779): at java.net.InetAddress.getAllByName(InetAddress.java:256)
W/System.err( 779): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
W/System.err( 779): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
W/System.err( 779): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
W/System.err( 779): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
W/System.err( 779): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err( 779): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err( 779): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
W/System.err( 779): at oauth.signpost.commonshttp.CommonsHttpOAuthProvider.sendRequest(CommonsHttpOAuthProvider.java:64)
W/System.err( 779): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:177)
W/System.err( 779): ... 16 more
und hier ist die Ausgabe beim ausführen der Twitter4J-code:
W/System.err( 817): api.twitter.comRelevant discussions can be on the Internet at:
W/System.err( 817): http://www.google.co.jp/search?q=6c607809 or
W/System.err( 817): http://www.google.co.jp/search?q=0f1d8134
W/System.err( 817): TwitterException{exceptionCode=[6c607809-0f1d8134 6c607809-0f1d810a], statusCode=-1, retryAfter=0, rateLimitStatus=null, version=2.2.1}
W/System.err( 817): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:204)
W/System.err( 817): at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
W/System.err( 817): at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102)
W/System.err( 817): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:108)
W/System.err( 817): at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:271)
W/System.err( 817): at com.examples.twitterimages.TwitterImagesActivity.getReqTokenAndAuthenticateUsingTwitter4J(TwitterImagesActivity.java:136)
W/System.err( 817): at com.examples.twitterimages.TwitterImagesActivity.onCreate(TwitterImagesActivity.java:64)
W/System.err( 817): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
W/System.err( 817): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
W/System.err( 817): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
W/System.err( 817): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
W/System.err( 817): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
W/System.err( 817): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 817): at android.os.Looper.loop(Looper.java:123)
W/System.err( 817): at android.app.ActivityThread.main(ActivityThread.java:3701)
W/System.err( 817): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 817): at java.lang.reflect.Method.invoke(Method.java:507)
W/System.err( 817): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
W/System.err( 817): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
W/System.err( 817): at dalvik.system.NativeStart.main(Native Method)
W/System.err( 817): Caused by: java.net.UnknownHostException: api.twitter.com
W/System.err( 817): at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
W/System.err( 817): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
W/System.err( 817): at java.net.InetAddress.getAllByName(InetAddress.java:256)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:69)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205)
W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:614)
W/System.err( 817): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:162)
W/System.err( 817): ... 19 more
Haben jemand dieses Problem gelöst? Ich bin hier hängengeblieben. Ich kann den code zum ausführen einer Java-SE-Programm, aber es funktioniert nicht auf android...
//Jonas
- Haben Sie dieses problem gelöst??
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen und Bestätigen Zwei Dinge -
1-Geben Callback-URL in Ihrem twitter-app erstellt, indem Sie auf die twitter-website (Gehen Sie zu Ihrem app-> Einstellungen->callback-url) Klicken Sie hier
2-Gehen Sie zu Telefon-Einstellungen, klicken Sie dann auf "Datum und Uhrzeit" und wählen Sie "Automatik" (Bitte stellen Sie sicher, dass Ihr Gerät die Zeitzone und die Uhrzeit,das Datum, alle sind richtig), Wenn Sie Ihre Zeit,Datum und Zeitzone nicht korrekt sind, dann kann man nicht twittern.
Habe ich ein tutorial zum einrichten von OAuth für Twitter mit Twitter4J auf Android hier, es umfasst den gesamten Projekt-Quellcode zum download sowie - so dass helfen könnte.
Als für Ihre spezifischen Frage - sind Sie in der Lage, eine Verbindung zum internet über den android-emulator? so wie es aussieht ist es nicht, um eine Verbindung - haben Sie andere apps auf dem emulator, die Verbindung im internet, die Sie könnten versuchen, und testen Sie gegen? manchmal wenn ich den emulator wenn die Internetverbindung fehlschlägt, dann wird das signal bar auf der emulator wird mit einer X-und no-bars.
Ich verwendet habe, Wegweiser in Android genau für twitter-client, funktioniert gut.
Ja, ich löste es (schrieb ich oben). Hatte ich Durcheinander mein manifest und geschrieben, die internet-Berechtigung schlecht. T
für mich, ich war mit http: statt https: für die request-URI ' s