メールアドレス認証 - UnityでSDKなしでFirebaseを使う
Unityからのメールアドレスとパスワードを使った認証方式を解説します。
この投稿はUnityでSDKなしでFirebaseを使うの一部です。
ソースコード全体は以下にあります。
Firebase Authenticationの設定
サイドメニュー Authentication > Sign-in method タブ
の画面から メールアドレス / パスワード を有効にします。

Unity側のユーザー登録の実装
Firebasseプロジェクト作成で取得したAPIキーを使用してユーザー登録を行います。
ユーザー登録のAPIは登録したレスポンスとして、idTokenとrefreshTokenが返ってきます。
idTokenとrefreshTokenについてはログインの実装部分で説明します。
var _apiKey = "APIキー";
var inputEmail = "メールアドレス";
var inputPassword = "パスワード";
WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.ContentType] = "application/json";
var url = $"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key={_apiKey}";
var requestBody = new FirebaseApi.EmailPasswordAuthRequest(inputEmail, inputPassword).ToJson();
var response = wc.UploadString(new Uri(url), requestBody);
Debug.Log($"idToken: {authResult.idToken}");
Debug.Log($"refreshToken: {authResult.refreshToken}");
参考: https://cloud.google.com/identity-platform/docs/use-rest-api#section-create-email-password
ユーザー追加の確認
AuthenticationのUsersタブで登録されたユーザーを確認することができます。

Unity側のログインの実装
ログインについてはユーザー登録とurlが異なるだけで処理の流れは同様です。
var _apiKey = "APIキー";
var inputEmail = "メールアドレス";
var inputPassword = "パスワード";
WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.ContentType] = "application/json";
var url = $"https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={_apiKey}";
var requestBody = new FirebaseApi.EmailPasswordAuthRequest(inputEmail, inputPassword).ToJson();
var response = wc.UploadString(new Uri(url), requestBody);
var authResult = FirebaseApi.EmailPasswordAuthResponse.FromJson(response);
Debug.Log($"idToken: {authResult.idToken}");
Debug.Log($"refreshToken: {authResult.refreshToken}");
レスポンスのidTokenはFirebaseでユーザーを識別しアクセストークンの役割をもつトークンで、他のFirebase関連のサービスを利用する際の認証情報として使います。idTokenの有効期限は30分程度なので、有効期限が切れてしまった場合はrefreshTokenを使用して新しいidTokenを取得します。このrefreshTokenをローカルストレージなどに保存することで、パスワードを保存せず安全にログイン状態を保つことができます。
具体的なトークンのリフレッシュ方法については別の投稿で解説します。
参考: https://cloud.google.com/identity-platform/docs/use-rest-api#section-sign-in-email-password
その他補足
AndroidでNameResolutionFailure例外が発生する場合は、
Player settings の Internet Access を required に設定してください。
Discussion