Согласно документации TwitterCore:
Самый простой способ аутентификации пользователя - использовать TwitterLoginButton.
Как вы аутентифицируете пользователя без TwitterLoginButton?
Согласно документации TwitterCore:
Самый простой способ аутентификации пользователя - использовать TwitterLoginButton.
Как вы аутентифицируете пользователя без TwitterLoginButton?
Взгляните на 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);
Вам не нужно создавать кнопку для этого. В принципе, если вы вникнете в некоторые из классов, вы обнаружите, что код относительно прост. Итак, вот как я это сделал. Вам просто нужно позвонить 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);
}
}
Вероятно, вы захотите вызвать обычный механизм OAuth через нечто вроде Twitter4J. Если вы используете TwitterLoginButton, все это будет завершено для вас через функции в Twitter Kit.
Если ваша цель - не добавлять 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()
в удобное для вас время.