[Из песочницы] Кастомная кнопка логина в Twitter SDK (Fabrik kit)
Эта статья предназначена для тех, кто уже разобрался с установкой и настройкой Twitter Login SDK (Fabric kit), но застрял на вопросе о том, как реализовать кастомный ui для кнопки логина. Вводную статью по Fabric можно найти по ссылке.«Наконец-то я избавлюсь от этого громоздкого кода,» — думал я, выпиливая twitter4j и предвкушая, какими аккуратными станут классы авторизации благодаря Twitter SDK. Дело было в субботу утром. По моим расчетам, это должно было занять не больше часа. Вечером я проклял того утреннего дурака, который решил пожертвовать целым выходным днем ради небольшого рефакторинга.Что же случилось? Прежде всего, не верьте, что плагин Fabric все сделает за вас. Скорее наоборот — вы еще с ним наплачетесь. Так что тем, кто решает задачу логина, советую параллельно посматривать вот сюда.
С виджетом TwitterLoginButton, который предоставляет sdk, все понятно, но что же делать тем, кого не устраивает стандартный дизайн? Долгие часы гугления не дали ровным счетом ничего. Полное отсутствие api references, java doc или исходного кода также не упростило задачу.
В конце концов я нашел такой костыль:
private void loginToTwitter () {
TwitterCore.getInstance ().logIn (this, new Callback
@Override public void failure (TwitterException e) { Log.i (LOG_TAG, «failure»); } }); } И чтобы всё это работало (о ужас!): @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult (requestCode, resultCode, data); (new TwitterLoginButton (this)).onActivityResult (requestCode, resultCode, data); } Через пару дней, вдоволь наплевавшись, я нашёл в себе силы для поиска нормального решения. Всё оказалось достаточно просто: private TwitterAuthClient client; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_login);
TwitterAuthConfig authConfig = new TwitterAuthConfig (TWITTER_KEY, TWITTER_SECRET); Fabric.with (this, new Twitter (authConfig));
Button customLoginButton = (Button) findViewById (R.id.custom_twitter_login);
customLoginButton.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick (View v) {
client = new TwitterAuthClient ();
client.authorize (LoginActivity.this, new Callback
@Override public void failure (TwitterException e) { Toast.makeText (LoginActivity.this, «failure», Toast.LENGTH_SHORT).show (); } }); } }); }
@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult (requestCode, resultCode, data); client.onActivityResult (requestCode, resultCode, data); } Если у вас есть более свежая информация по документации sdk, пишите — я с удовольствием добавлю её в статью.Исходный код на Github: github.com/Defuera/Social-network-login