Android: Войдите в Twitter с помощью Twitter4J

Что я пробовал:

Я уже зарегистрировал приложение в твиттере и получил потребительский ключ и секрет. Даже я получил разные коды для входа в twitter. Это то, что я пробовал:

http://thetechnib.blogspot.com/2011/01/android-sign-in-with-twitter.html

[Эта ссылка мертва, вы можете посмотреть архив здесь ]
http://www.android10.org/index.php/articleslibraries/291-twitter-integration-in-your-android-application

У меня проблема:

До сих пор код выше меня забирает, чтобы войти в twitter и позвольте мне войти в систему и иметь ПИН-код для завершения процесса входа. Но я понятия не имею, как использовать его для работы моего приложения. Я проверил весь код, но не нашел ничего, связанного с штырь.

Во-вторых, когда я зарегистрировал свое приложение в твиттере, он попросил URL обратного вызова, но, как было написано, его действительно не нужно, я пропустил указание. (Даже я не знаю, что это должно быть!)

И, следовательно, я даю null как CallbackURL в своем приложении.

Может ли кто-нибудь предложить мне, как я могу использовать этот ПИН для завершения процесса входа в систему и вернуть пользователя к основной деятельности моего приложения? Это URL-адрес обратного вызова, который вызывает проблему или что-то еще, что я делаю неправильно?

Пожалуйста, ответьте. Любая помощь appriciated! Благодарю.

РЕДАКТИРОВАТЬ :

Как предложил Франкенштейн, я пробовал код в github.com/ddewaele/AndroidTwitterSample/downloads

Я добавил свой потребительский ключ и секрет потребителя вместе с URL-адресом обратного вызова:

public static final String OAUTH_CALLBACK_SCHEME= "x-oauthflow-twitter"; public static final String OAUTH_CALLBACK_HOST= "callback"; public static final String OAUTH_CALLBACK_URL= OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST; 

Но это дает мне эту ошибку:

Logcat:

 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): Error during OAUth retrieve request token 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): oauth.signpost.exception.OAuthNotAuthorizedException: Authorization failed (server replied with a 401). This can happen if the consumer key was not correct or the signatures did not match. 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at com.ecs.android.sample.twitter.OAuthRequestTokenTask.doInBackground(OAuthRequestTokenTask.java:55) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at com.ecs.android.sample.twitter.OAuthRequestTokenTask.doInBackground(OAuthRequestTokenTask.java:1) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at android.os.AsyncTask$2.call(AsyncTask.java:185) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.lang.Thread.run(Thread.java:1096) 

Также показывает мне черный экран, когда я нажимаю кнопку TWEET, вместо того, чтобы заставлять меня подписывать экран твиттера.

Омг, я буду сумасшедшим … пытались с двух дней! 🙁 пожалуйста помоги.

Это потому, что ваше приложение зарегистрировано как настольный клиент. Чтобы перезаписать URL обратного вызова, ваше приложение необходимо зарегистрировать в качестве клиента браузера.

Попробуйте настроить фиктивный URL-адрес обратного вызова (http://example.com/ или что угодно) по адресу https://dev.twitter.com/apps/%5Bappid%5D/settings> URL-адрес обратного вызова, и ваше приложение будет распознано как браузер клиент.

Затем попробуйте код @Frankenstein или @ jamn224.

Во-первых, вам необходимо пройти аутентификацию должным образом:

 try{ consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL); startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); }catch(Exception e){ Log.e(TAG,e+""); } 

Необходимость CALLBACK_URL должна быть задана в файле манифеста (см. Ответ Франкенштейна). Приведенный выше код начинает намерение выполнять авторизацию на сервере Twitter. Информация обратного вызова необходима, чтобы намерение узнало, какое приложение должно вернуться после процедуры авторизации.

Затем нам нужно обработать возврат к приложению после аутентификации в Twitter:

  @Override public void onResume(){ super.onResume(); if (this.getIntent()!=null && this.getIntent().getData()!=null){ Uri uri = this.getIntent().getData(); //handle returning from authenticating the user if (uri != null && uri.toString().startsWith(CALLBACK_URL)) { String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); String token = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_TOKEN); try { Twitter t = new TwitterFactory().getInstance(); t.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); // Get Access Token and store it rToken = new RequestToken(token, CONSUMER_SECRET); AccessToken aToken = t.getOAuthAccessToken(rToken); storeAccessToken(aToken); //send to checkLoginState again since we have authorization now! checkLoginState(); } catch (Exception e) { Log.e(TAG, e+""); } } } }//end onResume 

Этот код захватывает данные из возвращаемого намерения, среди которых информация, чтобы захватить токен авторизации. «StoreAccessToken (aToken)» – это короткий метод, который я написал, который хранит токен в настройках приложения, так что нам не нужно повторять авторизацию каждый раз, когда приложение открыто.

Теперь, когда у нас есть токен авторизации, мы можем использовать его для авторизации экземпляра Twitter:

 twitter = new TwitterFactory().getInstance(); twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); twitter.setOAuthAccessToken(aToken); 

Вышеупомянутая переменная «твиттер» теперь разрешена и может делать свое дело.

Вы должны писать обратный вызов, как это проявляется в вашей деятельности

 <activity android:name="com.apps.twitter.PrepareRequestTokenActivity" android:launchMode="singleTask" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"> <intent-filter> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="x-oauthflow-twitter" android:host="callback" /> </intent-filter> </activity> 

И в файле констант

 final public static String CALLBACK_SCHEME = "x-oauthflow-twitter"; final public static String CALLBACK_URL = CALLBACK_SCHEME + "://callback";