かなりハマったので個人的なメモとして残しておきます。
ここでは全てKotlinで書いていきます。
FablicでTwiiterが使えなくなった!?
AndroidStudioでFablicプラグインを導入したときに「Twitter」の欄がなくなってました。

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_KEY
と CONSUMER_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)
}
}