0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flutter】Pixel端末でのみタスクキル後にFirebase Authがログアウトしてしまう問題の解決策

Posted at

Flutter と Firebase Authで開発している際、「特定の端末(Pixel 9aなど)でのみ、アプリをタスクキル(強制終了)するとログイン状態が保持されず、再起動時にログアウトしてしまう」 という現象に遭遇したので忘備録。

他のAndroid端末やiOSでは問題なく永続化されているにもかかわらず、Pixel端末でのみ発生する場合の解決策です。

環境

  • Flutter 3.32.8-stable
  • firebase_auth
  • 端末: Pixel 9a (Android 14/15)
  • 発生条件: アプリをバックグラウンドから完全に終了(タスクキル)して再起動した時

結論

android/app/src/main/AndroidManifest.xml<application> タグに、以下の2行を追加してバックアップを無効化してください。

android:allowBackup="false"
android:fullBackupContent="false"

原因

なぜログアウトしてしまうのか?

Androidのデフォルト設定では android:allowBackup="true"(自動バックアップ有効)になっています。この設定が有効だと、OSはアプリの再起動時やバックグラウンド処理のタイミングで、アプリのローカルデータ(Shared Preferencesなど)を自動的に復元しようと試みます。

Firebase Authは認証トークンを端末内に保存しますが、その暗号化には Android Keystore(システムキーストア) を利用しています。

  1. タスクキル発生: OSがデータをバックアップ/保持しようとする
  2. 再起動: OSがデータを復元するが、Keystoreの暗号鍵までは完全な状態で復元されない(あるいは整合性が取れなくなる)
  3. 不整合: Firebase Auth SDKが「保存されたトークンはあるが、現在のKeystoreの鍵では復号できない」と判断
  4. 結果: セキュリティ上の理由からデータを破棄し、未ログイン状態(currentUser == null)に戻る

まとめ

  • Pixel端末でだけログアウト現象が起きる場合は、AndroidManifest.xml の設定を疑う
  • android:allowBackup="false" を明示的に設定
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?