Firebase Auth:アプリを完全に終了すると、匿名アカウントが量産された(currentUser の復元待ち)

English version

トレカダッシュ 開発の記録 / 2026年10月

iOS アプリ「トレカダッシュ」で、「アプリを一度落とすと、また Apple のサインインを求められる」という報告がありました。調べると、19 人のうち 17 人が、作られては捨てられた匿名アカウントでした。原因は、アプリを起動した直後の、たった 1 行の確認のしかたでした。HANDOFF とコミット(2026年8月14日)の記録で書きます。

このサイトには、トレカダッシュの作品ページはまだありません。ここに書くのは、開発の記録です。

報告された症状

「1 回アプリを落とすと、なぜか、また Apple のサインインが求められる」。聞き取ると、条件がありました。スワイプで完全に終了して、起動し直したときだけ起こります。ホームボタンで離れて戻るだけなら、起きません。

実データを見る

Firebase の管理画面で、認証(Authentication)のユーザー一覧を、実際に開いてみました。結果は、こうです。

ユーザー人数
全体19
Apple のサインインが済んでいる2
使い捨ての匿名アカウント(作成した日とログインした日が同じ)17

17 件のうち、8 月 13 日だけで 10 件。アプリを起動し直すたびに、新しい匿名アカウントが、作られていたことになります。

原因:「まだ戻っていない」ものを、同期的に見ていた

アプリは、起動した直後に、「いまサインインしている人がいるか」(Auth.auth().currentUser)を、その場で確認していました。いなければ、匿名アカウントを新しく作る、という動きです。

ところが、Firebase の公式の説明にあるとおり、currentUser は、起動の直後には、保存場所(Keychain)からの復元が終わっているとは限りません。復元が間に合わないと、「誰もサインインしていない」と見えてしまいます。すると、本当は Apple のサインインが済んだ既存の状態が、もうすぐ復元されるところなのに、その直前に、新しい匿名アカウントを作ってしまう。競争(レースコンディション)です。

この競争が起きるのは、完全に終了してからの起動(冷起動)だけです。バックグラウンドから戻るときは、Firebase の初期化そのものが走り直さないので、起きません。報告の条件と、ぴったり合います。

直し方

もう一つ、分かったこと

この調査の途中で、別の事実も分かりました。Apple のサインインは、実装した 8 月 7 日から、このときまで、実機で一度も成功していませんでした。

確認できていないこと

iOS 側の変更なので、TestFlight に届くまでは、実機で効果を確かめられません。記録には、「実機で、完全に終了して起動し直すことをくり返しても、Apple の連携が保たれるかを、最優先で確認する」と書いてあります。その結果は、この記事を書いた時点で、記録にありません。

分かったこと

「起動した直後」の状態は、まだ、確定していない。

この記事は、HANDOFF とコミット(2026年8月14日)の記録から書きました。

この話に出てくるもの

ほかの記録

コメント

感想や、記事の間違いの指摘は、ここへ。書くには、GitHub のアカウントが要ります。

押すと、giscus(giscus.app)と GitHub に接続します。押さなければ、接続しません。詳しくはあつかいに書いています。