KINTO Tech Blog
General

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

Cover Image for 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を登録する必要があります:

  1. Firebase Console(プロジェクト設定 > Android アプリ): SHA-256必須
  2. Google Cloud Console(API Key > Android アプリ制限を設定している場合): SHA-1必須

💡 比喩: FirebaseはSHA-256パスポートを、API Key制限はSHA-1身分証を要求します。開発用(デバッグ/アップロード鍵)の身分証だけでは、空港(Playビルド)で通過できません。

解決手順

1. Play署名証明書のSHA取得

  1. Google Play Consoleにアクセス → 対象アプリを選択
  2. 左メニュー: テストとリリース → アプリの完全性
  3. ページを下にスクロールしてPlay アプリ署名セクションを見つける
  4. 設定を表示ボタンをクリック

Google Play Console - アプリの完全性画面

  1. アプリ署名鍵の証明書タブでSHA-1SHA-256をコピー

アプリ署名鍵の証明書 - SHA-1とSHA-256

2. Firebase ConsoleへのSHA-256登録

  1. Firebase Console → プロジェクト選択 → プロジェクト設定

Firebase Console - プロジェクト設定

  1. Your appsでAndroidアプリを選択
  2. SHA certificate fingerprintsセクションでAdd fingerprintをクリック
  3. Play署名鍵のSHA-256を貼り付けて保存

SHA certificate fingerprints追加

  1. (推奨) 既存のアップロード鍵やデバッグ鍵のSHA-1/256も登録されているか確認

3. Google Cloud ConsoleでのAPI Key制限設定(Android制限を使用している場合)

google-services.jsonapi_key.current_keyに対応するAPI KeyにAndroidアプリ制限が設定されている場合は、以下の手順でPlay署名鍵のSHA-1を登録する必要があります。

  1. Google Cloud Console → Firebaseと同じプロジェクトを選択
  2. 左メニュー: APIs & Services → 認証情報
  3. リストから該当API Keyを選択

Google Cloud Console - API Key選択

  1. アプリケーションの制限を確認:
    • 「Android apps」が選択されている場合: 次のステップに進む
    • 「なし」または他の制限の場合: このセクションはスキップ可能

API Key - Androidアプリ制限設定

  1. パッケージ名 + SHA-1ペアを追加:
    • パッケージ名: applicationId
    • SHA-1: Play署名鍵のSHA-1(アップロード鍵ではない)
  2. 保存(伝播に数分かかる場合があります)

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. 動作確認

  1. デバイスでアプリデータ削除またはアプリ完全削除
  2. Play Storeから再インストール
  3. アプリ起動 → adb logcatで確認:
adb logcat | grep -i -E "Firebase|Installation|FCM|AppCheck|Gms"

期待されるログ

  • FirebaseInstallationsFID生成成功
  • Gmstoken retrieval succeeded
  • FirebaseMessagingの**onNewToken(...)**コールバック発生

よくある問題(トラブルシューティング)

1. Play署名値ではなくアップロード鍵を登録

Firebase/Cloud両方で必ずアプリ署名証明書の値を使用してください。

2. マルチフレーバーでリリースが異なるファイルを使用

  • app/src/<flavor>/google-services.jsonの配置ミス
  • apply plugin: "com.google.gms.google-services"がモジュールの最下部にない

3. API Keyが異なる鍵

google-services.jsoncurrent_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. 登録後も同じエラーが発生する場合は?

以下の順序で点検してください:

  1. アプリ完全削除/再インストール
  2. リリースビルドのvalues.xml確認
  3. App Check Enforce OFFで分離
  4. API Keyマッチング再検証
  5. 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
Facebook

関連記事 | Related Posts

We are hiring!

【プロジェクトマネージャー(iOS/Android/Flutter)】モバイルアプリ開発G/東京

モバイルアプリ開発GについてKINTOテクノロジーズにおける、モバイルアプリ開発のスペシャリストが集まっているグループです。KINTOやmy routeなどのサービスを開発・運用しているグループと協調しながら、品質の高いモバイルアプリを開発し、サービスの発展に貢献することを目標としています。

【QAエンジニア】QAG/東京・大阪・福岡

QAグループについて QAグループでは、自社サービスである『KINTO』サービスサイトをはじめ、提供する各種サービスにおいて、リリース前の品質保証、およびサービス品質の向上に向けたQA業務を行なっております。QAグループはまだ成⾧途中の組織ですが、テスト管理ツールの導入や自動化の一部導入など、QAプロセスの最適化に向けて、積極的な取り組みを行っています。

イベント情報

Appium Meetup Tokyo #3