こんにちは。virapture株式会社でCEOしながらラグナロク株式会社でもCKOとして働いているもぐめっとです。
本日はなんでかわからないけどきっと困った人がいるんじゃないかというFirebaseAuthの匿名認証での現象の対応法です。
症状
FirebaseAuthの匿名認証はGoogleのエンジニアいわく、基本的に一度認証したら変わることがありません。
Anonymous authentication tokens do not expire and are persisted to disk between runs of your app.
自分が確認している仕様としては下記になります。
- iOSはKeychainに保存しているらしく、再インストールしても変わりません。
- Androidはアプリを再インストールすると変わります。
しかし、なぜかアプリを起動したら変わってしまうということがありました。
しかもなかなか再現せずに結構苦戦していました。
原因
こちらに答えがありました。
getCurrentUser が null を返す原因としては、Auth オブジェクトの初期化が完了していないことも考えられます。
注: Auth オブジェクトの初期化が完了していない場合も、currentUser が nil になることがあります。
なんということでしょう・・・/(^o^)\
Authの初期化が終わってないと別ユーザとして認識されてしまうみたいでした。
対策
先程のURLに対策も書いてあります。
AuthStateListener をアタッチすると、基になるトークンの状態が変わるたびにコールバックが返されます。これは、上記のようなエッジケースに対応するのに便利です。
ということで、signInAnonymouslyはリスナーを使って状態を判定した上で実施するようにしましょう!
ちなみにリスナーのイベントは下記タイミングでくるみたいです。
Right after the listener has been registered (リスナー登録直後)
When a user is signed in (サインイン時)
When the current user is signed out (サインアウト時)
When the current user changes (ユーザが変わった時)
まとめ
匿名認証を使う場合はリスナーイベントを必ず使うようにしましょう!
そして、この対策を教えてくれたラグナロクCTOの@jujuに感謝を!!!
最後に、ワンナイト人狼オンラインというゲームを作ってます!よかったら遊んでね!
他にもCameconやOffcha、問い合わせ対応が簡単にできるCSmartといったサービスも作ってるのでよかったら使ってね!
また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。
ラグナロクでもエンジニアやデザイナーのメンバーを募集しています!!楽しくぶち上げたい人はぜひお話ししましょう!!