はじめに
Kotlin Multiplatform (KMP) と Firebase Authentication を使って、googleでの認証機能を作成していました。しかし、
デバックでは成功するのにリリース版apkでは認証に失敗してしまう
この記事では、私と同じように「デバッグでは動くのに、なぜかリリース版だとgoogle認証に失敗する」という問題に直面した開発者への、その解決策を書き残します。
開発環境
-
Kotlin Multiplatform (KMP)
-
Firebase Authentication (Googleログイン)
-
Android Studio
問題の概要と原因
リリース版APKでGoogleサインインを試すと、アカウント選択後にログイン画面へ戻ってしまう現象が発生。デバックでのLogcatを確認すると、java.lang.SecurityException
と出力されていました。
これは、Google側から「このアプリは正規の開発者として登録されていません」と通信を拒否されていることを意味します。
原因は、Androidアプリが持つ2種類の署名キーにありました。
-
デバッグキー: Android Studioから直接実行する際に自動で使われる開発用の鍵
-
リリースキー: APK作成時に手動で作成する本番用の鍵
これらは全く別のSHA-1フィンガープリントを持っています。Firebaseに登録していたのはデバッグキーのSHA-1のみだったため、リリースキーで署名されたAPKからのアクセスがブロックされていたのです。
解決策
解決策はシンプルで、リリースキーのSHA-1もFirebaseに追加登録することです。
リリースキーのSHA-1を取得
Terminalでkeytoolコマンドを使い、APK署名に使ったキーストア (.jks) からSHA1の値を取得します。
keytool -list -v -keystore "<keystoreへのパス>" -alias <エイリアス名>
FirebaseにSHA-1を追加
Firebaseコンソールのプロジェクト設定で、取得したリリースキーのSHA-1を「SHA 証明書フィンガープリント」に追加します。(これでデバッグ用とリリース用の2つが登録された状態になります)
これでapkファイルの方でもgoogle認証に成功することができました。
まとめ
Googleログインを実装する際は、Android Studioからの実行で使われるデバッグキーと、APK作成時に使うリリースキーの2つのSHA-1フィンガープリントを、両方ともFirebaseに登録する必要がある、ということを学びました。