はじめに
自作のアプリをGoogle Play Consoleに登録して、内部テストをしようとしていましたが、その時に、Googleがアプリに署名してくれる「 Play アプリ署名」とGoogle Play Consoleにか自PCからアプリをアップロードする際に使用する「キーストアの署名」の違いがよくわかっておらず、大変な目にあったので、美貌の意味を込めて記事に残します
違いを理解しておらず困ったこと
自作アプリの特徴としては以下です。
- DBはfirebaseを使用
- 自作アプリのログインはGoggleアカウント認証を利用
下の画像の対応関係を理解していなかったが故に
AndroidStudioのエミュレータでは問題なく動作していましたが、
GooglePlayConsoleから実機に自作アプリをインストールした際に、
2のGoogleアカウントを利用したログインができない。 という事象にぶち当たりました。
アプリからGoogle認証でログインする際の流れ
- アプリでGoogleでログインボタンを押す
- アカウントを選択すると、Googleのバックグランドで認証が実施
- Googleが認証結果をトークンで返却
- 受け取ったトークンをfirebaseに送付
- firebaseでトークン結果を検証
- firebaseが検証結果を返す
- アプリ側で6の結果を元にログイン画面からホーム画面に遷移
という感じだと思います。
この認証フローの時にもう一つ理解しておきたいのがアプリのフィンガープリントです
Androidにおけるフィンガープリント
フィンガープリントはAPIプロバイダ(今回はfirebase)が接続してくるアプリの身分を確認するために使用されます(下の図でいうと、吹き出しに登録された内容とアプリが提示する内容が一致していれば通信を許可)
firebaseにアプリ名とフィンガープリントを登録する画面
リリース時にはフィンガープリントは2種類生まれる
それでは、AndroidStudioのエミュレータでは問題なく動作していたが、GooglePlayConsoleから実機にアプリをインストールした際に、Googleアカウントを利用したログインができない。 という事象について、原因を考えてみました。
雑な図ですが、以下を見てください
何となくお分かりでしょうか??
そうです。GooglePlayConsoleからアプリをインストールすると、Google側がアプリに署名するため、firebaseにGoogleが署名するキー情報(フィンガープリント)を登録しなければいけないのです
Play アプリ署名を使用すると、アプリ署名鍵の管理と保護、APK 配信時の署名を Google に委託することができます。App Bundle では、APK のビルドおよび署名が Google Play ストアで行われるため、App Bundle をアップロードする前に Play アプリ署名を設定する必要があります。
なので、GooglePlayConsoleのApp siginingからSH1のフィンガープリントを確認して、firebaseに登録してあげれば事象が解消しました!
おわりに
誰かの役に立てば嬉しいです。
誤り等あれば、ご指摘ください。