I am using twitter4j to integrate twitter in android. This is my code to for twitter. I am creating separate class for twitter.
I looked at similar questions to this but nothing works for me. Question and some other questions.
Twitter class
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;
}
}
This is my activity code from where i am calling loginToTwitter function.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OBLTwitter twitter = new OBLTwitter(this);
twitter.loginToTwitter();
}
This is my manifest file, I am adding this because i made some changes suggested by answerers of different questions.
<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>
Error log
If you're still unable to download the app, try uninstalling the Twitter app from your device. After it's uninstalled, restart your phone and then re-install the Twitter app from the Google Play Store. If you're still having trouble, check the Google Play Help Center for tips to troubleshoot download issues.
Go to the app store on iOS or Google Play on Android. Search for the official Twitter app. See our bird logo? Then you know it's the right one.
The reason you are getting an HTTP 403
(Forbbiden) status code most likely has to do with the fact that Twitter has recently restricted its traffic to TLS only.
From Twitter's calendar of API changes:
January 14, 2014 Restricting api.twitter.com to TLS traffic only API v1.1
Several libraries that were using plain HTTP by default have been updated in order to comply with this. So was the case with Twitter4j
. On version 3.0.5 it now uses TLS by default.
Now, if for some reason you really don't want to update the library, you might still be able to use your current version by doing a minor change to your code. The ConfigurationBuilder
class has a setSSL method, which you can set to true to use HTTPS. So you might get it to work by adding the following line to your code:
builder.setSSL(true);
The Status 403
error indicates that there's a problem with your login.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With