概要
- Kotlin
を用いた環境において、
- Firebase Google Auth
を実装しており、それを内部テストするときの
- Android App Bundle (AAB)
としてビルドして公開した時に
- ログインが動作しない問題について
ハマったので2度とハマらないように供養したいと思います。
Android アプリリリース時の署名について説明
dev 環境では、デバッグ用のSHA1をFirebaseマネジメントコンソールにて
Androidアプリの設定に登録
その後Google-services.jsonをダウンロード
アプリへとOAuthのclient_idなどを反映
の流れでできていましたが、
本番環境ではデバッグ用の署名は使わず、そのアプリ固有のものを使います。
この時、
Android App Bundle (AAB)
を使うと何がいいかというと、この署名用の鍵をGoogle側で管理してくれます。
これはもちろん自分で管理することは可能なのですが、
仮に管理を適当にしていて無くしてしまったとすると、
それ以降アプリのアップデートが不可能になります。
(もしかすると回避策はあるかもしれませんが、私はそこまで調べていないです。)
これはアプリの管理者というか、変更者の身元をきちんと証明するために署名があるので、
どこかの誰かが悪意を持ってアプデをかましてくるみたいなことを予防するためです。
ただ、いつでもそうであるように、セキュリティと利便性はトレードオフの関係にあり、
このセキュリティを担保するためには鍵を責任を持って自分で管理するというめんどくささと怖さがありました。
私はセキュリティ関連の企業に在籍しているので少しこのトレードオフについて語ってしまいましたが、話を元に戻すと、
Android App Bundle (AAB)
を使うことで、Googleがこのアプリの署名鍵を一元管理してくれるので、楽だということです。
また、先ほどの身元証明のためには、別の鍵(アップロード鍵)を自分で管理し、
アップロード時にこれで署名します。
そうすると、Google は管理している署名用の鍵で署名してくれ、それがリリースされるというわけです。
このアップロード鍵は自分で管理するのであれば何が今までと違うのか、と思われるかもしれませんが、
この鍵は無くしても大丈夫です。
無くしたとすると、Google Play Console からアップロード鍵を更新する、として設定し直せば大丈夫だからです。
今回のハマりポイント
さて、背景としては
Android App Bundle (AAB)
を使うと、Googleがディベロッパーの代わりに管理してくれる
署名鍵を使ってリリース用のAPKに署名してくれるということでした。
ここで、Google Play Console にて、
設定 --> アプリの安全性 --> アプリの署名
に進むと、
アプリ署名鍵の証明書
アップロード鍵の証明書
と二つセクションがあることがわかります。
これは先ほどの説明を読めばなるほど、たしかにね!
と思います。
ここで、一つ疑問がでます。
では、Firebase Authで登録していたSHA1はどちらのものを登録すればいいのか?
ここがハマりポイントであり、結局中身をよく理解したというよりは、どちらも試してどちらもなぜか動かんなとかなった挙句、
いや署名鍵登録すれば大丈夫やろ
と思いFirebase側に登録しました。
しかし、内部テストに登録してPlay store からインストールしたアプリからログインしようとすると、
ログインが遷移せず、途中で止まってしまう形になり、
Firebase側に間違いなく署名鍵のSHA1が登録されているにもかかわらずうまくいかず、ハマりました。
解決策
結論を言うと
署名鍵の証明書
に紐ついたSHA1をFirebase Console にて登録、
--> Google-services.json をダウンロード
--> アプリに反映
--> AAB のビルド
--> AAB のアップロード
を行っていることは間違っていませんでした。
なぜこれでログインアクションで落ちていたのかわかりませんでしたが、
最終的に
署名鍵を作り直す(更新する)ようにGoogle Developer Console
で設定し、鍵を作り直した(リフレッシュ)した後に登録し直すことで解決しました。
まとめ
同じような問題に時間を使ってしまった人が他にいるかわかりませんが、
もし自分のような人がいるのであれば、どこかの誰かの助けになれたら嬉しいです。
今回はこの辺で。