かなりハマったので個人的なメモとして残しておきます。
ここでは全てKotlinで書いていきます。

FablicでTwiiterが使えなくなった!?

AndroidStudioでFablicプラグインを導入したときに「Twitter」の欄がなくなってました。

スクリーンショット 2018-01-09 18.23.00.png

FablicでTwitterログイン機能使えなくなったんですかね?
だれかわかる方教えてください。

そこで今回はFablicを使いません。

Twitterにアプリケーション登録

例のごとくTwitterにアプリケーション登録を行い、FirebaseAuthに登録してください。
詳しくはこちらをご覧ください

https://firebase.google.com/docs/auth/android/twitter-login?hl=ja

AndroidプロジェクトにTwitterSDKを組み込む

app/build.gradleに下記を追加する


dependencies {
  compile 'com.twitter.sdk.android:twitter:3.1.1'
  compile 'com.twitter.sdk.android:twitter-mopub:3.1.1'
}

組み込んだら上にある sync now を押してgradleを読み込ませてください。

これでSDKの組み込み完了です。

ログイン機能を実装したい activity でTwitterの初期設定を行う。


val config = TwitterConfig.Builder(this)
                .logger(DefaultLogger(Log.DEBUG))
                .twitterAuthConfig(TwitterAuthConfig(CONSUMER_KEY,CONSUMER_SECRET))
                .debug(true)
                .build()
Twitter.initialize(config)
setContentView(R.layout.activity_user_login)

CONSUMER_KEYCONSUMER_SECRET は各自Twitterにアプリケーション登録したときに取得したものに書き換えてください。

ログイン処理を書いていく

Viewにボタンを追加する
これ書くだけでいい感じのTwitterログインボタンが生成されます。

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

ボタンイベントを書いていきます。
FirebaseのmAuthはメンバ変数で持たせておいてください。


    private lateinit var mAuth: FirebaseAuth

    ・・・・・・・・・・・・・・


        // Firebaseの初期化
        mAuth = FirebaseAuth.getInstance()

        login_button.callback = object : Callback<TwitterSession>() {

            override fun success(result: Result<TwitterSession>?) {
                System.out.println("成功です")

                if (result != null){
                    //ここで成功したあと処理のメソッドを呼ぶ
                    handleTwitterSession(result.data)
                }else{

                  //ここもエラー処理もなんかする
                }
            }

            override fun failure(exception: TwitterException?) {
                System.out.println("失敗です")
            }
        }

ログイン処理が成功するとまず最初に下記メソッドが呼ばれます。
その後、onSuccessなどがコールバックされます。


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        login_button.onActivityResult(requestCode,resultCode,data)
    }

最後にFirebaseに登録する処理を書いていきます。

private fun handleTwitterSession(session: TwitterSession) {

        val credential = TwitterAuthProvider.getCredential(
                session.authToken.token,
                session.authToken.secret)

        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {

                        // たぶんここでユーザーのユニークキーを取得できる
                        val user = mAuth.currentUser
                    } else {
                        Toast.makeText(this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show()
                    }
                }
    }

これでログイン処理が実装できます。

全体のActivityクラス


class UserLoginActivity : AppCompatActivity() {

    private lateinit var mAuth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val config = TwitterConfig.Builder(this)
                .logger(DefaultLogger(Log.DEBUG))
                .twitterAuthConfig(TwitterAuthConfig(CONSUMER_KEY,CONSUMER_SECRET))
                .debug(true)
                .build()
        Twitter.initialize(config)

        setContentView(R.layout.activity_user_login)

        // Firebaseの初期化
        mAuth = FirebaseAuth.getInstance()

        login_button.callback = object : Callback<TwitterSession>() {

            override fun success(result: Result<TwitterSession>?) {
                System.out.println("成功です")

                if (result != null){
                    handleTwitterSession(result.data)
                }else{
                    //エラーハンドリングする
                }
            }

            override fun failure(exception: TwitterException?) {
                System.out.println("失敗です")
                // TODO ここでエラーダイアログを表示させる
            }
        }

    }

    private fun handleTwitterSession(session: TwitterSession) {

        val credential = TwitterAuthProvider.getCredential(
                session.authToken.token,
                session.authToken.secret)

        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {

                        // たぶんここでユーザーのユニークキーを取得できる
                        val user = mAuth.currentUser
                    } else {
                        Toast.makeText(this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show()
                    }
                }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        login_button.onActivityResult(requestCode,resultCode,data)
    }

}

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.