Android

【Android】Googleサインインでエラー10が出た時の対処方法

AndroidでGoogle Sign Inを行い、IDTokenを取得して、FirebaseAuthと連携させようとした所、Google Sign Inでエラーコード10が返ってきて、Sign Inできませんでした。

このエラーコード10の原因と対応方法を説明します。

 

Google Sign In エラーコード10とは?

Google Sign Inをしてエラーコード10が来た場合、それは開発者エラーだそうです。
僕たちのせい。

(アプリケーションの設定が間違っています。このエラーは回復不可能で、致命的なものとして扱われます。開発者はこの後のログを見て、より実用的な情報を判断しなければなりません。)

public static final int DEVELOPER_ERROR
The application is misconfigured. This error is not recoverable and will be treated as fatal. The developer should look at the logs after this to determine more actionable information.

Constant Value: 10

色々と調べた結果、2つの原因が関わっていることがわかったので、それぞれ詳しく説明していきます。

 

原因1: Web Client IDの指定ミス

Google Sign InでIDTokenを取得する時、こんな感じのコードを書きますが、requestIdTokenの引数に指定しているキーが「Web Client ID」です。

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build()

 

この値は、Firebaseでプロジェクトを作成してからダウンロードしてアプリ内に設置する「google-services.json」ファイル内の client > oauth_client > client_id の値で、OAuth2を使ってGoogle認証する時のアクセスIDとなります。

Androidネイティブだと「R.string.default_web_client_id」の形で取得できますが、Unityで呼び出している場合は、google-services.jsonから該当箇所の文字列をコピペしてください。
間違ったIDを指定していると、Google Sign Inでエラーコード10が返ってきます。

このWeb Client IDは、Firebaseプロジェクトを作ると、Google CloudにもFirebaseと同じ名前のプロジェクトが自動生成されて、APIとサービス > 認証情報 > OAuth2.0クライアントID、の欄に自動で追加されています。

間違って削除しないように気をつけてください。

原因2: フィンガープリントの指定ミス

最近仕様が変わったせいで、ここでのミスが頻発しているとと思うのでぜひじっくり最後まで見てください。

Google Sign Inをするには、該当アプリのFirebaseプロジェクトにフィンガープリントを登録しないといけません。

場所は、該当アプリのFirebaseプロジェクトを開き、左上の設定アイコンを押して「プロジェクトの設定」

下の方にスクロールすると「SHA証明書フィンガープリント」という欄があるので「フィンガープリントを追加」で追加します。

デバッグ環境用フィンガープリントの取得方法

デバッグ環境用のフィンガープリントは、ターミナルを開き次のコマンドを叩くことで取得できます。

keystoreのパスワードは「android」です。

// Mac
keytool -list -v -keystore ~/.android/debug.keystore

// Windows
keytool -list -v -keystore %USERPROFILE%\.android\debug.keystore

Mac環境では、なぜかMD5の欄にSH1のフィンガープリントが表示されているのでそちらをFirebaseに登録します。

 

本番環境用フィンガープリントの取得方法

本番環境用のフィンガープリントは、公式情報やネットの情報を見ると、本番用の署名したkeystoreから取得すると書いていますが、それは罠です。

AndroidStudioの機能を使って取得したら直ったという話も見つかりますが、それも罠です。

2021年8月から、今までのAndroid標準のファイル形式apkでのアプリ提出は禁止となり、aab(Android App Bundle)形式での提出が必須となりました。

それに合わせて、本番用のフィンガープリントは自作ではなく、Google Play Consoleで自動採番されるようになったので、そちらの値をFirebaseに登録しないと、本番でGoogle Sign Inをした時、エラー10が返ってきてしまいます。

場所は、Google Play Consoleで該当アプリを開き
設定 > アプリの署名 > アプリ署名鍵の証明書 > SHA1 証明書のフィンガープリント
です。

同じ画面の下の方に「アップロード鍵の証明書」という同じフォーマットの項目もあるので間違わないように気をつけてください。

 

おまけ: OAuth同意画面はいらない

Google CloudにOAuth同意画面という項目があり、この画面が必要と言及しているサイトもありますが、用意しなくてもGoogle Sign Inできているので、IDTokenを取得するだけの場合は必要ないようです。