Подтвердить что ты не робот

Android Ткань TwitterCore логин без TwitterLoginButton

Согласно документации TwitterCore:

Самый простой способ аутентификации пользователя - использовать TwitterLoginButton.

Как вы аутентифицируете пользователя без TwitterLoginButton?

4b9b3361

Ответ 1

Взгляните на TwitterAuthClient.

Пример использования будет чем-то вроде (где getCallingActivity() может быть заменен вашим вызовом 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
        }
    });

Затем делегируйте onActivityResult в TwitterAuthClient,

twitterAuthClient.onActivityResult(requestCode, resultCode, data);

Ответ 2

Вам не нужно создавать кнопку для этого. В принципе, если вы вникнете в некоторые из классов, вы обнаружите, что код относительно прост. Итак, вот как я это сделал. Вам просто нужно позвонить TwitterAuthClient().authorize(Activity, Callback<TwitterSession)

Полный код:

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

    }
}

Ответ 3

Вероятно, вы захотите вызвать обычный механизм OAuth через нечто вроде Twitter4J. Если вы используете TwitterLoginButton, все это будет завершено для вас через функции в Twitter Kit.

Ответ 4

Если ваша цель - не добавлять TwitterLoginButton в свои макеты, создайте TwitterLoginButton программно и вручную выполните событие click:

TwitterLoginButton button = new TwitterLoginButton(this);

button.setCallback(new Callback<TwitterSession>() {
    @Override
    public void success(Result<TwitterSession> result) {
        // Do something with result, which provides a TwitterSession for making API calls
    }

    @Override
    public void failure(TwitterException exception) {
        // Do something on failure
    }
});

button.performClick();

Ключевым моментом здесь является то, что после создания этой кнопки вы можете позвонить button.performClick() в удобное для вас время.