Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Fabric TwitterCore login without TwitterLoginButton

According to the TwitterCore documentation :

The simplest way to authenticate a user is using TwitterLoginButton.

How do you authenticate a user without the TwitterLoginButton?

like image 794
Jacob Tabak Avatar asked Jan 09 '15 19:01

Jacob Tabak


2 Answers

Take a look at TwitterAuthClient.

An example usage would be something like (where getCallingActivity() can be replaced with your calling Activity),

TwitterAuthClient twitterAuthClient = new TwitterAuthClient();
twitterAuthClient.authorize(getCallingActivity(), new Callback<TwitterSession>() {
        @Override
        public void success(final Result<TwitterSession> result) {
            final TwitterSession sessionData = result.data;
            // Do something with the returned TwitterSession (contains the user token and secret)

        }

        @Override
        public void failure(final TwitterException e) {
            // Do something on fail
        }
    });

Then delegate the onActivityResult to TwitterAuthClient,

twitterAuthClient.onActivityResult(requestCode, resultCode, data);
like image 154
deubaka Avatar answered Nov 11 '22 18:11

deubaka


You don't need to create a button for this. Basically, if you dig into some of the classes, you'll find that the code is relatively straightforward. So, here's how I did it. You just need to call TwitterAuthClient().authorize(Activity, Callback<TwitterSession)

The full code:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.Result;
import com.twitter.sdk.android.core.TwitterException;
import com.twitter.sdk.android.core.TwitterSession;
import com.twitter.sdk.android.core.identity.TwitterAuthClient;


/**
 * Created by Andrew on 6/23/15.
 */
public class ConnectTwitterActivity extends Activity {
    //The auth client itself
    /*you can abstract this and call TwitterCore.getInstance().login()
    but basically that call is doing this one.. 
    */
    TwitterAuthClient client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //instanciate our client
        client = new TwitterAuthClient();
        //make the call to login 
        client.authorize(this, new Callback<TwitterSession>() {
            @Override
            public void success(Result<TwitterSession> result) {
                //feedback
                Toast.makeText(getApplicationContext(), "Login worked", Toast.LENGTH_LONG).show();
            }

            @Override
            public void failure(TwitterException e) {
                //feedback
                Toast.makeText(getApplicationContext(), "Login failed", Toast.LENGTH_LONG).show();
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //this method call is necessary to get our callback to get called. 
        client.onActivityResult(requestCode, resultCode, data);

    }
}
like image 2
AndrewSmiley Avatar answered Nov 11 '22 20:11

AndrewSmiley



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!