Firebaseを利用することで、Unityでも複数に認証プロバイダを簡単
に提供できると思って、トライしてみました。結論的にはemail/password認証だけなら簡単だけど、twitterなどの他の認証プロバイダを提供しようとすると、かなり難しいということがわかりました・・・。
ここではまずemail/passwordによる認証方法を実施する手順を紹介しています。
twitterでの認証は次回です。
前提
- Unity 2021.3.0f1
- Firebase sdk 9.6.0
手順
- Unityで認証するプロジェクトを作成します
- 今回利用するために新規作成で問題ありません
- ただ、iOSの場合バンドルID、Androidの場合パッケージ名などが必要なので、設定しておきます
- Firebase プロジェクトを作成します
- アプリを Firebase に登録します
- Firebase 構成ファイルを追加します
- FirebaseAuth.unitypackage をインストールします
- https://firebase.google.com/download/unity?hl=ja からfirebase_unity_sdk_9.6.0.zipをダウンロード(9.6.0はバージョンだと思うので、実施するタイミングで違うと思います)
- 解凍するとdotnet4とdotnet3とありますが、3は旧バージョン用に残してあるだけだと思うので、4のほう(firebase_unity_sdk/dotnet4/FirebaseAuth.unitypackage)を使います
- ユーザ登録用のプログラムを実行します
- 以下プログラムをコピペ
using UnityEngine; using Firebase.Auth; public class NormalAuthentication : MonoBehaviour { void Start() { var email = "demo.user@normal.com"; var password = "password"; CreateUserWithEmailAndPassword(email, password); // SingIn(email, password); } private void CreateUserWithEmailAndPassword(string email, string password) { var auth = FirebaseAuth.DefaultInstance; auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => { if (task.IsCanceled) { Debug.LogWarning("SignInWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogWarning($"SignInWithCredentialAsync was fault. {task.Exception}"); return; } var newUser = task.Result; Debug.Log($"Firebase上でメールアドレス認証によるユーザ作成に成功しました。 UserId is {newUser.UserId}"); }); } private void SingIn(string email, string password) { var auth = FirebaseAuth.DefaultInstance; auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInWithEmailAndPasswordAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception); return; } var newUser = task.Result; Debug.Log($"サインインに成功しました。UserId is {newUser.UserId}"); }); } }
- Hierarchy上に空のGameObjectを作って、InspectorからNormalAuthenticationを追加します
- 実行してコンソールに
Firebase上でメールアドレス認証によるユーザ作成に成功しました。UserId is zrTwK79hohXxxxxxSxxxxXXjIdh2
と表示されれば成功です。UserIdは架空のものです。
エラーFirebaseCppApp-9_6_0.bundle”は、開発元を検証できないため開けません。
が出る場合は、エラー対応を参照ください。 - Firebase を確認すると以下のようにユーザが登録されているはずです。
- 以下プログラムをコピペ
- サインインのプログラムを実行します。
- 以下のような感じで修正。
void Start() { var email = "demo.user@normal.com"; var password = "password"; // CreateUserWithEmailAndPassword(email, password); SingIn(email, password); }
- 実行してコンソールに
サインインに成功しました。UserId is zrTwK79hohXxxxxxSxxxxXXjIdh2
と表示されれば成功です。
- 以下のような感じで修正。
エラー対応
実行しようとするとbundleが利用できないエラー
エラー概要
Macで実行しようとすると、FirebaseCppApp-9_6_0.bundle”は、開発元を検証できないため開けません。
エラーが発生しました。
対応方法
「システム環境設定」→「セキュリティとプライバシー」 →「一般」を選択し、下部に出ている「このまま許可」ボタンを押してください。その上で実行すれば、正常に動作するはずです。
参考
- Firebaseのドキュメント
- UnityとFirebaseで出来ること2022