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

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

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

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

iOS

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

解決済

1回答

2376閲覧

unityでfirebaseのAuthenticationが画面遷移した際にうまく動作しない

roge

総合スコア12

Firebase

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

iOS

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

0クリップ

投稿2019/08/21 05:06

unityでfirebaseのAuthenticationを用いてログイン処理を行なっています。ログインを行うシーンでは、ログイン後にユーザの情報を取得できるのですが、画面遷移をして他のシーンに移った時にauth.CurrentUserがnullになってしまいます。iosの実機でビルドした際にこの問題が生じるのですが、androidの実機でビルドをした際にはこの問題は生じません。
画面遷移後のシーンでは、
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
で現在ログイン中のユーザを取得しようとしています。
firebaseの公式ドキュメントに以下のコードでauthの状況を監視できると書いてあったのでログインを行う画面でこのコードを実行しています。

c#

1void InitializeFirebase() 2 { 3 Debug.Log("Setting up Firebase Auth"); 4 auth = Firebase.Auth.FirebaseAuth.DefaultInstance; 5 auth.StateChanged += AuthStateChanged; 6 AuthStateChanged(this, null); 7 } 8 9 // Track state changes of the auth object. 10 void AuthStateChanged(object sender, System.EventArgs eventArgs) 11 { 12 if (auth.CurrentUser != user) 13 { 14 bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null; 15 if (!signedIn && user != null) 16 { 17 Debug.Log("Signed out " + user.UserId); 18 } 19 user = auth.CurrentUser; 20 if (signedIn) 21 { 22 Debug.Log("Signed in " + user.UserId); 23 } 24 } 25 }

画面遷移した際に、現在のユーザの情報を取得できる方法を教えて頂きたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

firebase disconnects user when changing scene · Issue #326 · firebase/quickstart-unity · GitHub
こちらを見るに、Firebaseの仕様のようです。
(他の一般的なスクリプトがそうであるように、シーン遷移したらインスタンスは削除され、その中の変数もクリアされる)

なので上記内でも提示されている通り、auth変数をstatic publicにするとか、
ログインを行うクラスをシングルトン(DontDestroyOnLoad付与)にしてログイン時のauthを維持する等がいいと思います。

投稿2019/08/22 02:18

sakura_hana

総合スコア11425

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

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

roge

2019/08/23 04:59

ありがとうございます。おかげさまで無事にユーザを取得することができました。 一つ気になることがあります。以下のリンクにあるように認証情報がiosならキーチェーンに、androidならandroid keystoreに保存されるようです。画面遷移するたびに再びauthを呼び出せばこれらの保存された認証情報を取得できると考えたのですが、その考え方は誤っていますか? https://firebase.google.com/docs/auth/unity/manage-users?hl=ja androidでビルドした際には、auth変数をpublic static にせずに、各々のシーンでauthを取得できたので疑問に思いました。
sakura_hana

2019/08/23 05:35

一度ログイン後、別シーンで auth = Firebase.Auth.FirebaseAuth.DefaultInstance; をすればログイン済みのauthデータが取れるんじゃないか、と私も思うのですが、そうじゃないということらしいです。(私も試してないので詳しくは分かりませんが) iOSの場合、「ログインする為の鍵」は保存出来ても「ログイン後の情報」は保存出来ない(保存させない)ようになっているのではないかと思います。 どちらかというとOS側の仕様に合わせた結果、挙動の差が出ているのかなという気がします。
roge

2019/08/23 07:43

親切に答えていただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問