I'm attempting to use the new Fabric API that Twitter is offering to let users login to my app. I've followed the tutorial exactly (at least I think I have, maybe I've made some mistakes) here after setting up my project with all of the necessary steps; now when I hit the login button and authenticate the button gives back a successful response but when I go to get the Twitter Session after that I get an exception that looks like
Caused by: java.lang.IllegalStateException: Must start Twitter Kit with Fabric.with() first
(again, I followed the tutorial to a T up to this point, but if you can think of anything then I'd be willing to try it)
The Fabric SDK separates functionality into modules called Kits. You must indicate which kits you wish to use via Fabric.with(). This is typically done by extending Android’s Application class.
package com.example.app;
import android.app.Application;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
TwitterAuthConfig authConfig =
new TwitterAuthConfig("consumerKey",
"consumerSecret");
Fabric.with(this, new Twitter(authConfig));
// Example: multiple kits
// Fabric.with(this, new Twitter(authConfig),
// new Crashlytics());
}
}
More info: https://dev.twitter.com/twitter-kit/android/integrate
See the canonical sample app at: https://github.com/twitterdev/cannonball-android
My case error is: Must start with Fabric.with() before calling twitter kit
Solution:
Before that I have used:
Fabric.with(this, new Crashlytics()); &
Fabric.with(this, new Twitter(authConfig));
Finally not working.
Before Integrating Twitter my code is
-- Fabric.with(this, new Crashlytics());
After Integrating Twitter I replace with
-- Fabric.with(this, new Twitter(authConfig),new Crashlytics());
Now working like a charm,
Here's how I implemented Twitter login with fabric:
Declare twitter key and secret:
private static final String TWITTER_KEY = "r5nPFPbcDrzoJM9bIBCqyfHPK";
private static final String TWITTER_SECRET = "oJ8y2KPIySPpoBX3eCcqgcnmPGXLI94BR4g9ZztnApSmXQG9Ij ";
//Twitter Login Button
TwitterLoginButton twitterLoginButton;
onCreate() method:
//Initializing TwitterAuthConfig, these two line will also added automatically while configuration we did
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig));
setContentView(R.layout.activity_main);
//Initializing twitter login button
twitterLoginButton = (TwitterLoginButton) findViewById(R.id.twitterLogin);
//Adding callback to the button
twitterLoginButton.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
//If login succeeds passing the Calling the login method and passing Result object
login(result);
}
@Override
public void failure(TwitterException exception) {
//If failure occurs while login handle it here
Log.d("TwitterKit", "Login with Twitter failure", exception);
}
});
3.override onActivityResult() :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Adding the login result back to the button
twitterLoginButton.onActivityResult(requestCode, resultCode, data);
}
4.finally, login():
public void login(Result<TwitterSession> result) {
//Creating a twitter session with result's data
TwitterSession session = result.data;
//Getting the username from session
final String username = session.getUserName();
//This code will fetch the profile image URL
//Getting the account service of the user logged in
Twitter.getApiClient(session).getAccountService()
.verifyCredentials(true, false, new Callback<User>() {
@Override
public void failure(TwitterException e) {
//If any error occurs handle it here
}
@Override
public void success(Result<User> userResult) {
//If it succeeds creating a User object from userResult.data
User user = userResult.data;
//Getting the profile image url
String profileImage = user.profileImageUrl.replace("_normal", "");
Log.d("done","name-->"+username + "url-->"+profileImage);
// Toast.makeText(this,"name-->"+username + "url-->"+profileImage,Toast.LENGTH_LONG).show();
}
});
}
You have username and profilepicture url in login()
to use wherever you want.
Latest Twitter Integration with Android Studio
This below link provide the sample code you can use this code to integrate twitter latest sdk (Fabric). it's provide all feature we can easily integrate less time take
Twitter Sample code
Reference Code Plz check it