概要
Android アプリで FirebaseAuth を使って Twitter OAuth の認可を受けた後、サーバに accessToken と secret を送り、サーバ側で Twitter API を用いて認可されている情報の参照などを行います。
クライアント(Android アプリ)側の実装については、基本的に公式ドキュメント(以下)に記述されている通りの方法でできますが、accessToken と secret の取得方法 で少し迷ったので、備忘録を兼ねてその解決方法を記します。
accessToken, secret の取得方法
Androidアプリが Firebase SDK の Twitter OAuth で認可を受けると、OnSuccessListener::onSuccess
がコールバックされ、その引数(AuthResult
)から accessToken と secret を取得できます。
以下、公式ドキュメントよりその部分のコード(Java)を抜粋します。
firebaseAuth
.startActivityForSignInWithProvider(/* activity= */ this, provider.build())
.addOnSuccessListener(
new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
// User is signed in.
// IdP data available in
// authResult.getAdditionalUserInfo().getProfile().
// The OAuth access token can also be retrieved:
// authResult.getCredential().getAccessToken().
// The OAuth secret can be retrieved by calling:
// authResult.getCredential().getSecret().
})
ただし、上述のコメントで記載されている内容通り getAccessToken()
と getSecret()
を実行することができません。
解決方法
authResult.credential
(AuthCredential
型)を OAuthCredential
型 にキャストすれば大丈夫です。
以下、公式のサンプルコードをKotlinに修正しつつ accessToken と secret を取得するサンプル(抜粋)を示します。
firebaseAuth // ← ついでにこれも公式ドキュメントで説明漏れているけど FirebaseAuth.getInstance() です
.startActivityForSignInWithProvider(/* activity= */ this, provider.build())
.addOnSuccessListener {
val credential = it.credential as? OAuthCredential
val accessToken = credential?.accessToken
val secret = credential?.secret
TODO("Send `accessToken` and `secret` to your server.")
}