前回 FaceBookSDK を使った記事を執筆しましたが、今回はTwitterを使ったログイン機能の実装です。今時のサイトを見ていると、大体が FaceBook + Twitter のセットになっていますね。
AndroidにFaceBookログインを実装する

1. Fabricの準備

Twitter用のSDKはFabricというモバイル用モジュールに含まれています。従って、Twitter SDKを利用するためにはまずFabricのプラグインをAndroid Studioに組み込むことになります。
Fabricを利用するためにはまずFabricのサイトで登録を行います。
https://get.fabric.io/

氏名、メールアドレス、パスワードを入力し、アカウントを作成、メール認証後、IDEでAndroid Studioを選択します。

fabric
Android StudioのFileメニューのSetting(Mac版の場合、Android StudioのPreferencesメニュー)でPlugins を選択します。
次に「Browse repositories」を押して、「Fabric」を選択します。そして「Install Plugin」でプラグインをインストールします。
Android Studioを再起動します。するとツールバーにFabricのボタンが現れますのでそれを押し、ログインします。

2. Twitter SDKの組み込み

Fabricログイン後、「AllKits」から「Twitter」を選択し、「Install」を押します。
「Create Acount」でアカウントを作成すると「Add Twitter to your porject」の画面でプロジェクトにどのような変更を行うかが表示されます。「Apply」を押すとこれが適用され、プロジェクトが自動的に変更され、TwitterSDKの設定が完了します。
twitter-fabric

IDEに移って確認すると、gradleのファイルとAndroidManifest.xml、それにJavaのソースコードが変更されています。JavaのアクティビティクラスではonCreateで以下のように認証コードが追加されています。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TwitterAuthConfig authConfig 
            = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
        Fabric.with(this, new Twitter(authConfig));
        setContentView(R.layout.activity_main);
    }

TwitterAuthConfigクラスでキーを指定しSDKの認証を行っています。この認証用のキーはクラス内にstatic finalなフィールドとして宣言されています。
その後、ビルドが終わったらこのアプリを一度実行して下さい。これによりツイッターへのアプリ認証が完了します。

3. Twitterでログインボタン設置

ここからログインコードを組み込みます。これはここまでのように自動的というわけにはいきませんがFabricの画面に従ってコードをコピーしていけばOKです。
Android StudioのFabricの画面で「Log in with Tiwtter」の「Get Code」を押します。
すると、まず「Add a Twitter login button」という画面が出ます。ここではログインボタンを画面に表示するためのコードが出ます。選択されている部分がツイッターのログインボタンです。その部分をコピーします。

    <com.twitter.sdk.android.core.identity.TwitterLoginButton
        android:id="@+id/twitter_login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"/>

このコードはレイアウトのxmlファイルにコピーします。resのlayout配下にあるactivity_main.xml などです。

4. ログインコードの実装

次にNextを押すと今度はアクティビティクラスのログインのコードが表示されます。
まずクラスのフィールドとなるログインボタンの変数を宣言します。

    private TwitterLoginButton loginButton;

次にonCreate内のコードをsetContentViewの下あたりにコピーし貼り付けます。
未定義のクラスでエラー(赤字)になるところではAlt+Enterでインポートを設定していきます。

        loginButton = (TwitterLoginButton) findViewById(R.id.twitter_login_button);
        loginButton.setCallback(new Callback() {
            @Override
            public void success(Result result) {
                // The TwitterSession is also available through:
                // Twitter.getInstance().core.getSessionManager().getActiveSession()
                TwitterSession session = result.data;
                // TODO: Remove toast and use the TwitterSession's userID
                // with your app's user model
                String msg = "@" + session.getUserName() + " logged in! (#" + session.getUserId() + ")";
                Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
            }
            @Override
            public void failure(TwitterException exception) {
                Log.d("TwitterKit", "Login with Twitter failure", exception);
            }
        });

ここではloginButtonにコールバックを設定しています。
その successメソッドがログイン成功したときに呼ばれるメソッドです。その中で session.getUserName()を使ってユーザ名を取得、session.getUserId()でユーザIDを取得しています。そして、Toastでこれらを表示、ユーザを識別することができます。

5. onActivityResultでコールバック実装

次にonCreateメソッドの下にonActivityResultがありますのでこれもコピーし貼り付けます。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // Make sure that the loginButton hears the result from any
        // Activity that it triggered.
        loginButton.onActivityResult(requestCode, resultCode, data);
    }

ログイン画面を開いてログインした後にはこのonActivityResultに戻るので、loginButtonクラスにその引数を渡して処理を行うようにしています。結果的にCallbackクラスのsuccessなどが呼ばれることになります。
これでログインができるようになります。実行を行うと、ログインボタンを押し、ツイッターアカウントでログインします。すると、ユーザ名とユーザIDがToastで表示されます。

まとめ

FabricはIntelliJ対応を謳っているだけあって、Android Studioから結構色々と出来てしまいますね。概念を理解するのは難しいというか、ややこしいのですが覚えてしまえばサクサク開発環境を整えられます。
AndroidにFaceBookログインを実装したい方はこちら