LoginSignup
11
5

More than 5 years have passed since last update.

FirebaseでTwitterログインを実現する(Android)

Last updated at Posted at 2018-01-09

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

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

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

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

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

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

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

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

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

}

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5