Google Play配布後のFirebase FCM/Installationsエラー解決: Play署名鍵SHA登録完全ガイド

はじめに
はじめまして、KINTOテクノロジーズ(KTC)でモバイルアプリ(Flutter)の開発を担当しているHand-Tomiです。
アプリをGoogle Play Storeに公開した後、ストアからインストールしたアプリでのみFirebase関連のエラーが発生する経験をしたことはありませんか?
デバッグビルドや内部テストでは正常に動作していたのに、本番環境でのみ以下のようなエラーログが表示される場合:
E Failed to get FIS auth token
java.util.concurrent.ExecutionException: ...
Caused by: Firebase Installations Service is unavailable. Please try again later.
この記事では、このような問題の根本原因と解決方法を段階的に解説します。
問題の症状
- デバッグビルド/内部リリース: 正常動作
- Play Storeからインストール: Firebase初期化失敗、FCMトークン発行不可
- 一時的なサーバー障害のように見えますが、実際にはリリースビルドのアプリ識別(署名/パッケージ)とFirebase/Google Cloud設定の不一致が原因です
核心原因の理解
Play Storeの最終署名メカニズム
Google Playにアプリを配布すると、最終的なAPK/AABはGoogle Play App signing key(アプリ署名鍵)で再署名されます。これは開発時に使用するアップロード鍵とは異なる鍵です。
2箇所への登録が必須
Firebase/Google CloudでAndroidアプリを正しく識別するには、以下の2箇所にPlay署名鍵のSHA fingerprintを登録する必要があります:
- Firebase Console(プロジェクト設定 > Android アプリ): SHA-256必須
- Google Cloud Console(API Key > Android アプリ制限を設定している場合): SHA-1必須
💡 比喩: FirebaseはSHA-256パスポートを、API Key制限はSHA-1身分証を要求します。開発用(デバッグ/アップロード鍵)の身分証だけでは、空港(Playビルド)で通過できません。
解決手順
1. Play署名証明書のSHA取得
- Google Play Consoleにアクセス → 対象アプリを選択
- 左メニュー: テストとリリース → アプリの完全性
- ページを下にスクロールしてPlay アプリ署名セクションを見つける
- 設定を表示ボタンをクリック
- アプリ署名鍵の証明書タブでSHA-1とSHA-256をコピー
2. Firebase ConsoleへのSHA-256登録
- Firebase Console → プロジェクト選択 → プロジェクト設定
- Your appsでAndroidアプリを選択
- SHA certificate fingerprintsセクションでAdd fingerprintをクリック
- Play署名鍵のSHA-256を貼り付けて保存
- (推奨) 既存のアップロード鍵やデバッグ鍵のSHA-1/256も登録されているか確認
3. Google Cloud ConsoleでのAPI Key制限設定(Android制限を使用している場合)
google-services.json
のapi_key.current_key
に対応するAPI KeyにAndroidアプリ制限が設定されている場合は、以下の手順でPlay署名鍵のSHA-1を登録する必要があります。
- Google Cloud Console → Firebaseと同じプロジェクトを選択
- 左メニュー: APIs & Services → 認証情報
- リストから該当API Keyを選択
- アプリケーションの制限を確認:
- 「Android apps」が選択されている場合: 次のステップに進む
- 「なし」または他の制限の場合: このセクションはスキップ可能
- パッケージ名 + SHA-1ペアを追加:
- パッケージ名:
applicationId
- SHA-1: Play署名鍵のSHA-1(アップロード鍵ではない)
- パッケージ名:
- 保存(伝播に数分かかる場合があります)
4. FirebaseOptions検証(推奨)
リリースビルドが正しいgoogle-services.json
を参照しているか確認します。
ビルド成果物の確認
app/build/generated/res/google-services/<variant>/values/values.xml
で以下の値が期待通りか確認:
gms_app_id
(=mobilesdk_app_id
)project_id
gcm_defaultSenderId
(= Project number)default_web_client_id
/api key
実行時オプションのログ出力
val options = FirebaseApp.getInstance().options
Log.d("FB_OPTS", """
appId=${options.applicationId}
projectId=${options.projectId}
apiKey=${options.apiKey}
sender=${options.gcmSenderId}
""".trimIndent())
5. 動作確認
- デバイスでアプリデータ削除またはアプリ完全削除
- Play Storeから再インストール
- アプリ起動 →
adb logcat
で確認:
adb logcat | grep -i -E "Firebase|Installation|FCM|AppCheck|Gms"
期待されるログ
FirebaseInstallations
のFID生成成功Gms
のtoken retrieval succeededFirebaseMessaging
の**onNewToken(...)**コールバック発生
よくある問題(トラブルシューティング)
1. Play署名値ではなくアップロード鍵を登録
Firebase/Cloud両方で必ずアプリ署名証明書の値を使用してください。
2. マルチフレーバーでリリースが異なるファイルを使用
app/src/<flavor>/google-services.json
の配置ミスapply plugin: "com.google.gms.google-services"
がモジュールの最下部にない
3. API Keyが異なる鍵
google-services.json
のcurrent_key
とCloud Consoleで編集対象のキーが同じか再確認してください。
4. App Check(Play Integrity) Enforce ON
統合前であれば一時的にEnforce OFF → 原因分離後に再度ONにします。
5. R8/ProGuard/Resource Shrink影響
一時的にminifyEnabled false
/ shrinkResources false
でビルドして分離テストします。
6. デバイス/環境問題
- Google Play開発者サービスの更新が必要
- デバイス時間の自動同期設定
- プロキシ/セキュリティアプリによるブロック
最終チェックリスト
- Play Console → アプリの完全性 → アプリ署名証明書のSHA-1/256を取得
- Firebase Console → Androidアプリ → SHA-256(必要に応じてSHA-1も)登録
- Cloud Console → API Key(Android apps制限設定時) → パッケージ名 + Play署名SHA-1登録
- ストアインストール版を完全削除 → 再インストール後、FID/FCMトークン発行確認
-
values.xml
および実行時FirebaseOptions値の検証 - App Check/ProGuard/ネットワーク等の追加要因点検
FAQ
Q1. Play Integrity APIの状態が「統合: 未開始」でもSHA登録は必要ですか?
はい。状態に関係なく、ストアビルドはPlay署名鍵で署名されます。FirebaseにはSHA-256を必ず登録し、Cloud API KeyにAndroidアプリ制限を設定している場合はSHA-1も登録する必要があります。
Q2. Cloud Console Android アプリ制限にSHA-256は登録できませんか?
いいえ。UI上SHA-1のみ入力できます。代わりにFirebase側にSHA-256を登録してください。
Q3. 登録後も同じエラーが発生する場合は?
以下の順序で点検してください:
- アプリ完全削除/再インストール
- リリースビルドの
values.xml
確認 - App Check Enforce OFFで分離
- API Keyマッチング再検証
- R8/ProGuard影響確認
まとめ
この問題は「リリースビルドはPlay署名鍵基準」という点を見落とすとよく発生します。
- Firebaseには SHA-256
- Cloud API Key(Android制限設定時)には SHA-1
この2つを正しい場所に登録すれば、ほとんどの場合すぐに解決します。
実務では登録後の再インストールとオプション検証ログまで一緒にチェックすることで、再発を防ぐことができます。
参考: ローカルkeystoreからのSHA抽出
Play署名鍵はローカルにありませんが、アップロード鍵/デバッグ鍵確認用:
# keystoreから証明書フィンガープリント表示 (SHA-1/256)
keytool -list -v -keystore <your-keystore.jks> -alias <alias-name>
# Androidデバッグ鍵 (macOS/Linux)
keytool -list -v -keystore ~/.android/debug.keystore \
-alias androiddebugkey -storepass android -keypass android
関連記事 | Related Posts
We are hiring!
【プロジェクトマネージャー(iOS/Android/Flutter)】モバイルアプリ開発G/東京
モバイルアプリ開発GについてKINTOテクノロジーズにおける、モバイルアプリ開発のスペシャリストが集まっているグループです。KINTOやmy routeなどのサービスを開発・運用しているグループと協調しながら、品質の高いモバイルアプリを開発し、サービスの発展に貢献することを目標としています。
【QAエンジニア】QAG/東京・大阪・福岡
QAグループについて QAグループでは、自社サービスである『KINTO』サービスサイトをはじめ、提供する各種サービスにおいて、リリース前の品質保証、およびサービス品質の向上に向けたQA業務を行なっております。QAグループはまだ成⾧途中の組織ですが、テスト管理ツールの導入や自動化の一部導入など、QAプロセスの最適化に向けて、積極的な取り組みを行っています。