Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Twitter Fabric Login for Android

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)

like image 299
Jacob Collins Avatar asked Oct 29 '14 12:10

Jacob Collins


3 Answers

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

like image 109
Cipriani Avatar answered Nov 07 '22 00:11

Cipriani


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,

like image 45
sssvrock Avatar answered Nov 07 '22 00:11

sssvrock


Here's how I implemented Twitter login with fabric:

  1. Declare twitter key and secret:

     private static final String TWITTER_KEY = "r5nPFPbcDrzoJM9bIBCqyfHPK";
     private static final String TWITTER_SECRET = "oJ8y2KPIySPpoBX3eCcqgcnmPGXLI94BR4g9ZztnApSmXQG9Ij ";
    
     //Twitter Login Button
     TwitterLoginButton twitterLoginButton;
    
  2. 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.

like image 3
Parsania Hardik Avatar answered Nov 07 '22 01:11

Parsania Hardik