過去にExpoでGoogleログインを実装したが、Expo SDK52では実装方法が変わっていたため、改めて記事にまとめる。
PR
実装
使用するライブラリ
前回の実装からの移行方法を記載する。元の実装については以下の記事を参照。
Expo SDK48の時点ではexpo-auth-session
にexpo-auth-session/providers/google
が存在し、それを使用していた。
現在、この実装方法は廃止され、@react-native-google-signin/google-signinを使用した方法が推奨されている。
react-native-google-signin.github.io
フィンガープリントの設定
ローカル環境のSHA-1は以下のコマンドで取得可能。
$ cd android $ ./gradlew signingReport
出力の中にあるAlias: androiddebugkey
のSHA1の値を確認し、FirebaseのプロジェクトのAndroidアプリに設定する。
設定を誤ると、認証時に以下のエラーが発生する。
[com.google.android.gms.common.api.ApiException: DEVELOPER_ERROR]
コードの実装
初期設定
以下のコードでGoogle Sign-Inの初期設定を行う。webClientId
にはFirebaseコンソールのAuthentication→ログイン方法→Googleを選択すると表示されるウェブ クライアント IDを設定。
useEffect(() => { GoogleSignin.configure({ webClientId: Constants.expoConfig?.extra?.WEB_GOOGLE_CLIENT_ID, offlineAccess: true, }); }, []);
Googleログインの実装
以下のコードでGoogleログインを行い、認証情報を取得する。
const onGoogleLogin = useCallback(async () => { try { const response = await GoogleSignin.signIn(); const googleCredential = GoogleAuthProvider.credential( response.data.idToken, ); firebaseLogin(googleCredential); } catch (e) { console.log("error:", e); Alert.alert("ログインに失敗しました"); errorCallback?.(); } }, [firebaseLogin, errorCallback]);
動作確認
実装後、以下のように動作する。