なかなかClaude-4-sonnetさんでも解決できなかったのでメモ。(生成AIでのプログラムは、フレームワークを管理画面で設定している場合の不具合を、プログラム上で解決しようと試みるので、間違った方にハマりがち)

React Native + Expo + Firebase Authenticationを使用したアプリで、Android実機でのログイン時にauth/app-not-authorizedエラーが発生する問題を解決しました。この記事では、問題の原因と解決策、そしてExpo/EAS環境でよくある落とし穴について詳しく説明します。

問題の概要

エラーの詳細

textError: [auth/app-not-authorized] This app is not authorized to use Firebase Authentication. Please verify that the correct package name, SHA-1, and SHA-256 are configured in the Firebase Console. [ Invalid app info in play_integrity_token ]

発生環境

  • プラットフォーム: Android実機のみ
  • フレームワーク: React Native + Expo
  • ビルド方法: EAS Build
  • 認証方法: Firebase Authentication(電話番号認証)

重要なポイント

  • iOSでは正常動作
  • Android実機でのみエラー発生

問題の原因

真の原因

Google Play Consoleのアプリ署名鍵の証明書がFirebaseプロジェクト設定に登録されていなかった

なぜiOSは動作したのか

  • iOSはGoogle Play Consoleの証明書検証が不要
  • AndroidのみがGoogle Play Consoleの証明書を必要とする

エラーメッセージの誤解

text[ Invalid app info in play_integrity_token ]

このメッセージから「Play Integrity = App Check」と判断しましたが、実際は:

  • Play Integrity API = Google Play Consoleの証明書検証
  • Firebase App Check = 別のセキュリティ機能

解決策

1. Google Play Consoleでアプリ署名鍵を確認

  1. Google Play Consoleにログイン
  2. アプリを選択
  3. 「リリース管理」→「アプリの署名」を確認
  4. SHA-1とSHA-256フィンガープリントをコピー

2. Firebase Consoleに証明書を登録

  1. Firebase Consoleにログイン
  2. プロジェクトを選択
  3. 「プロジェクトの設定」→「全般」タブ
  4. Androidアプリの「SHA証明書フィンガープリント」に追加

まとめ

この問題は、Google Play Consoleのアプリ署名鍵の証明書がFirebaseプロジェクト設定に登録されていなかったことが根本原因でした。App Checkの設定変更は全て不要で、単純にFirebase Consoleでの証明書登録だけで解決できる問題でした。Expo/EAS環境では、署名鍵の管理が複雑になるため、問題が発生した際は:

  1. エラーメッセージを正確に解釈する
  2. プラットフォーム固有の問題か確認する
  3. 署名鍵の整合性を慎重にチェックする

これらのポイントを押さえることで、効率的に問題を解決できるでしょう。