Twitter не работает с twitter4j в android

Я использую twitter4j для интеграции twitter в android. Это мой код для твиттера. Я создаю отдельный класс для twitter.

Я посмотрел на подобные вопросы, но ничего не работает для меня. Вопрос и некоторые другие вопросы.

Класс Twitter

public class OBLTwitter { private static final String TAG = "OBLTwitter"; private Activity activity; // Twitter constants private static final String TWITTER_CONSUMER_KEY = "KEY"; private static final String TWITTER_CONSUMER_SECRET = "SECRET"; public static final String TWITTER_CALLBACK_URL = "app://ridesharebuddy"; // Twitter variables private static Twitter twitter; private static RequestToken requestToken; public static boolean userDeniedToContinue; public OBLTwitter(Activity activity) { Log.d(TAG, "Parameterized constructor called."); this.activity = activity; userDeniedToContinue = false; } // Login to twitter public void loginToTwitter() { Log.e(TAG, "Logging in to twitter."); if(!isNetworkAvailable(this.activity)) { Log.e(TAG, "Interent connection not available"); } // Set up Twitter object ConfigurationBuilder builder = new ConfigurationBuilder(); builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); Configuration configuration = builder.build(); TwitterFactory factory = new TwitterFactory(configuration); twitter = factory.getInstance(); Thread thread = new Thread(new Runnable() { @Override public void run() { try { if(twitter == null) { Log.e(TAG, "twitter is null"); } Log.e("called", "called run method"); // Get RequestToken and call authentication URL to show // twitter page requestToken = twitter .getOAuthRequestToken(TWITTER_CALLBACK_URL); Log.e(TAG, "getting request token"); Log.e("oAuth token :", requestToken.getToken()); Log.e("oAUth secret:", requestToken.getTokenSecret()); Log.e("oAuth URL: ", requestToken.getAuthenticationURL()); activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri .parse(requestToken.getAuthenticationURL()))); } catch (TwitterException te) { Log.e(TAG, "Twitter exception, Login error."); te.printStackTrace(); Log.e(TAG, "Error code : " + te.getErrorCode()); Log.e(TAG, "Error message : " + te.getErrorMessage()); Log.e(TAG, "Status code : " + te.getStatusCode()); Log.e(TAG, "Access level : " + te.getAccessLevel()); } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); } public boolean isNetworkAvailable(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null; } 

}

Это мой код активности, из которого я вызываю функцию loginToTwitter.

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); OBLTwitter twitter = new OBLTwitter(this); twitter.loginToTwitter(); } 

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

  <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.objectlounge.OBLTwitter.MainActivity" android:label="@string/app_name" > android:launchMode="singleInstance"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="ridesharebuddy" android:scheme="app" /> </intent-filter> </activity> </application> 

Журнал ошибок

Введите описание изображения здесь

Solutions Collecting From Web of "Twitter не работает с twitter4j в android"

Причина, по которой вы получаете код статуса HTTP 403 (Forbbiden), скорее всего , связана с тем фактом, что Twitter недавно ограничил свой трафик только TLS .

Из изменений в календаре API Twitter :

14 января 2014 г. Ограничение api.twitter.com только для трафика TLS API v1.1

Несколько библиотек, которые использовали простой HTTP по умолчанию , были обновлены, чтобы соответствовать этому. Так было с Twitter4j . В версии 3.0.5 он теперь использует TLS по умолчанию.

Теперь, если по какой-то причине вы действительно не хотите обновлять библиотеку, вы все равно сможете использовать свою текущую версию, выполнив незначительные изменения в вашем коде. Класс ConfigurationBuilder имеет метод setSSL , который вы можете установить в true для использования HTTPS. Таким образом, вы можете заставить его работать, добавив следующую строку в свой код:

 builder.setSSL(true); 

Ошибка Status 403 указывает на наличие проблемы с вашим именем входа.

  • Убедитесь, что вы успешно создали приложение на dev.twitter.com
  • Убедитесь, что вы используете правильные клавиши в правильных местах
  • Правильно ли указано ваше имя пользователя / пароль
  • Наконец, используете ли вы последнюю версию Twitter4J? Убедитесь, что он использует только HTTP * S * URL.

Отмечено, что Twitter изменил свой URL-адрес « http://api.twitter.com/1.1 » на « https://api.twitter.com/1.1 »

Подробнее здесь: https://groups.google.com/forum/#!topic/socialauth-users/AE0Xy6kRRHc

Итак, может быть, ваш lib просто устарел. Вы можете попробовать использовать другую библиотеку. (Я использую https://github.com/3pillarlabs/socialauth, и это неплохо)

Просто обновите свой твиттер-банку с помощью последней версии.

Попробуй это:

 mTwitter = new TwitterFactory().getInstance(); mHttpOauthConsumer = new CommonsHttpOAuthConsumer(twitterConsumerKey, twitterSecretKey); mHttpOauthprovider = new CommonsHttpOAuthProvider("https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token", "https://twitter.com/oauth/authorize"); try{ authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL); }catch(OAuthCommunicationException oACEx){ Log.d("", ""); }catch(OAuthMessageSignerException oAMSEx){ Log.d("", ""); }catch(OAuthNotAuthorizedException oANAEx){ Log.d("", ""); }catch(OAuthExpectationFailedException oAEFEx){ Log.d("", ""); } 

Но вам нужно добавить некоторые библиотеки jar в свой проект:

https://code.google.com/p/oauth-signpost/downloads/detail?name=signpost-core-1.2.1.1.jar&can=2&q=

https://code.google.com/p/oauth-signpost/downloads/detail?name=signpost-commonshttp4-1.2.1.1.jar&can=2&q=

https://code.google.com/p/oauth-signpost/downloads/detail?name=signpost-jetty6-1.2.1.1.jar&can=2&q=