twitter-kit-android icon indicating copy to clipboard operation
twitter-kit-android copied to clipboard

Twitter kit constantly asking me to "authorise app"

Open MatthewJamesBoyle opened this issue 7 years ago • 2 comments

I have a twitter login file which is pretty boiler plate:


public class TwitterLogin extends AppCompatActivity {

    TwitterAuthClient client;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_twitter_login);
        TwitterConfig config = new TwitterConfig.Builder(this)
                .logger(new DefaultLogger(Log.DEBUG))
                .twitterAuthConfig(new TwitterAuthConfig("key", "key"))
                .debug(true)
                .build();
        Twitter.initialize(config);
        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();
            }
        });
        startActivity(new Intent(TwitterLogin.this,MainFeedScreen.class));


    }

    @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);


    }

}

This seems to work fine.

However, I also have an AsyncTask class that is meant to go off and get a users home timeline:


public class TwitterRequests extends AsyncTask<String,String,JSONObject> {
    TwitterApiClient twitterApiClient;
    StatusesService statusesService;
    private MainFeedScreen mainAct;
    private ProgressDialog progressDialog;
    private List<Tweet> tweetList;


    public TwitterRequests(View v, MainFeedScreen mainAct){
        twitterApiClient = TwitterCore.getInstance().getApiClient();
        statusesService = twitterApiClient.getStatusesService();
        this.mainAct = mainAct;
        this.progressDialog = new ProgressDialog(v.getContext());

    }

    @Override
    protected JSONObject doInBackground(String... params) {
        Call<List<Tweet>> call  = statusesService.homeTimeline(20,null,null,false,false,true,true);
        call.enqueue(new Callback<List<Tweet>>() {
            @Override
            public void onResponse(Call<List<Tweet>> call, Response<List<Tweet>> response) {
                Log.d("Twitter","In on response");

//            tweetList = response.body();
            }

            @Override
            public void onFailure(Call<List<Tweet>> call, Throwable t) {
                Log.d("Twitter","in failure");



            }
        });


        return new JSONObject();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog.show();
    }

    @Override
    protected void onPostExecute(JSONObject jsonObject) {
        super.onPostExecute(jsonObject);
        mainAct.setRedditAdapter(new TwitterAdapter(tweetList));
        mainAct.getmRecyclerView().setAdapter(mainAct.getRedditAdapter());
        progressDialog.hide();
    }
}

In another activity I make a new instance of TwitterRequest() and execute it.

Whenever I do this, I am redirected to a webview for Twitter where I must authorise myself again. If i press authorise it redirects me to my homescreen. If i press the button again it does the same thing.

After hours of frustration and no mention in the docs, im starting to think this a bug.

MatthewJamesBoyle avatar Jun 01 '17 13:06 MatthewJamesBoyle

Same issue, when i click the button to login again, it will redirect to authorisation page even I sign in successfully before. What I expect is the success(Result<TwitterSession> result) should be called instead redirecting to authorisation page if I logged in previously.

jaychang0917 avatar Jul 15 '17 17:07 jaychang0917

As a workaround to #90 you can check if the user is already logged in or not:

if (TwitterCore.getInstance().getSessionManager().getActiveSession() != null) {
    // User already logged-in
} else {
  // Call authorize
}

adamc01 avatar Jul 24 '17 17:07 adamc01