質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1583閲覧

firebaseの匿名ログインがnilになる

smawe

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/10/27 10:47

firebaseの匿名でのログインに関する質問です。

firebaseで匿名でログインをした後、一度アプリを落としてから再起動してから Auth.auth().currentUser を使用するとnilになってしまいます。これを解消する方法はあるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

私の手元ではログイン状態でのアプリ起動時に Auth.auth().currentUser の値が nil となる現象を確認できなかったのですが、以下に抜粋した情報などによると、そのような現象が発生する可能性があるため、 addStateDidChangeListener を使ってログイン状態取得完了を待つようにするのがよいとのことです。

初期化したすぐの状態ではcurrentUserはnilなので準備ができたかを確認するには
認証状態をlistenする必要があります。
次のドキュメントを参照してください。

https://firebase.google.com/docs/auth/ios/start#listen_for_authentication_state

addStateDidChangeListenerはログインされていなければcallback引数のuserがnilで呼び出され、ログインしていればオブジェクトが入っています。

addStateDidChangeListenerのcallbackが呼び出されるまではローディング画面を表示しておくなどするとよいでしょう。

引用元: https://ja.stackoverflow.com/a/39113

投稿2021/10/27 18:35

__k_san__

総合スコア177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smawe

2021/10/28 02:47 編集

お忙しい中ありがとうございます。 私自身少し勘違いをしていたようなので確認させてください。 Auth.auth().createUser(withEmail: email, password: password) { (res, error) in if error == nil{} }  上記のようにしてアカウントを作成してログインを行うことができると思います。そして作成が成功したらメイン画面に移動という形にします。そこからアプリを上スワイプで終了して再度アプリを開く。このアプリを終了した時点で自動的にログアウトされるものではないのでしょうか?アプリを終了してもログインしたままになっているということですか?? ちなみにここを読んでログイン状況は保てない?ものだと思っていました。 https://teratail.com/questions/207421
__k_san__

2021/10/28 03:43

はい、ログイン状態であればアプリを再起動してもログイン状態が維持されます。 ただ、ひとつ注意すべき点がありまして、アプリの再起動時に既にログイン済かの状態を取得するには少し時間がかかる場合があるため、 `addStateDidChangeListener` を使ってログイン状態取得完了を待つ必要があるのではないか・・・というのが回答の意図するところです。
smawe

2021/10/28 04:06

なるほど。ありがとうございます。通常ログイン済でしたら、Auth.auth().currentUser?.uid == nil{} これによって`addStateDidChangeListener`のように時間をかけずに判別できるということですか?(私の場合は原因はわかりませんがこれが毎回nilになってしまいますが。。。)
__k_san__

2021/10/28 04:23

いえ、ログイン済であっても、 `addStateDidChangeListener` を介さずに直接 `Auth.auth().currentUser` の値を参照した場合には、値がnilである場合があります。 そのため、ログイン済かどうかは、 `addStateDidChangeListener` 経由で判定べきです。 `addStateDidChangeListener` をキーワードに検索するとどこかに実装例があると思いますので、まずはそうした情報を参考にしてログイン済かどうかの判定処理を試してみてください。
smawe

2021/10/28 08:25

ネットで検索して以下のようなコードにしてみましたが、noneがプリントされてしまいます。ローディング画面を表示させたりある程度余裕を持たせたりしてもnoneになってしまうい、何ができていないのかわからないのですがもう少し頑張ってみます。 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) Auth.auth().addStateDidChangeListener { (auth, user) in if let user = user { print(user) } else { print("none") } }
__k_san__

2021/10/28 09:27

念のため、そもそもログインが成功しているかどうかを確認してみた方がよいかもしれませんね。 Firebaseのコンソールで、当該ユーザのログインが成功しているかを確認できますでしょうか? (一度もログインできていなければ、コンソール上のユーザ一覧において、当該ユーザのログイン日が空となっていると思います。)
smawe

2021/10/28 10:20

これで作成したアカウントは全てログイン日が入っているので、ログイン自体はできてると思います。 それか勝手にログアウトをしてしまっているのですかね。。 一応、アカウント作成・ログインを行なった直後だとnilにはならないのですが、再起動するとnilになってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問