logo

Firebase AuthentificationでEmailアカウントと匿名アカウントを実装する

投稿日2023-02-09

更新日2024-05-17

Picture of the logo
目次(タップして移動)

今回はFirebase Authentificationを使ってUnityに匿名認証、メール認証を実装する手順を紹介します。

初期設定

Firebaseの登録と初期設定については、前回の記事を御覧ください。

  • firebaseアカウントの作成
  • firebase consoleでプロジェクトの作成
  • プロジェクト内にUnity用アプリを作成
  • iOSかAndroidを選択
  • 設定用のjsonファイルをダウンロード
  • SDKファイルのダウンロード

ここまでは前回記事と同じです。今回は画面左のメニューからAuthentificationを押して下さい。

初期化

  • Firebase SDKを任意の場所に解凍してFirebaseAuthのパッケージをインストールする。
  • Unityエディター上で空オブジェクトを作成し、下記のc#スクリプトをアタッチする。
public class FirebaseInit : MonoBehaviour
{
    static public FirebaseAuth auth { private set; get; }
    private void Awake()
    {
        auth = FirebaseAuth.DefaultInstance;
    }
}

上記の例ではstatic変数を使っていますが、staticを使いたくない人は付けなくても構いません。ただし都度インスタンス化が必要です。この初期化処理は割と重いようなので、一回で済まるべきだと思います。

匿名アカウントで認証する

アカウント認証が必要なアプリに匿名認証は必須と言っていいでしょう。むしろ、これだけで良いです!会員登録、ユーザー登録、個人情報の入力を嫌う人は多いので、必ず実装しましょう。他の認証方法よりもハードルは低く手順も一番簡単です。

using UnityEngine;
using Firebase.Auth;

public class FirebaseAnonymousAuth : MonoBehaviour
{
    FirebaseAuth auth => FirebaseInit.auth;
    public void SignInWithAnonymous()
    {
        auth.SignInAnonymouslyAsync().ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignInAnonymouslyAsync was canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignInAnonymouslyAsync encountered an error: " + task.Exception);
                return;
            }

            Firebase.Auth.FirebaseUser newUser = task.Result;
            Debug.LogFormat("User signed in successfully: {0} ({1})",
                newUser.DisplayName, newUser.UserId);
        });
    }
}

これだけで、初回起動時には新しいアカウントが発行され、次回以降は同じ端末であれば同じアカウントでログインされます。ただし、ログインする機器が変わると別アカウントになるので、機器をまたいで同じアカウントを使用したい場合は後述するEメール認証や、google、twitterなどのSNS連携が必要となります。

Eメールアドレスで新規アカウントを作る

以下にEメールで新規アカウントを作るコードを紹介します。ここでは、

  • SignUp = 新規アカウント作成
  • SignIn = 既存アカウントへのログイン

とします。

FirebaseAuth auth => FirebaseInit.auth;

    /// <summary>
    /// 新規email認証アカウントを作成する
    /// </summary>
    public void SignUp(string email, string password)
    {
        auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignUp canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignUp error: " + task.Exception);
                return;
            }

            // サインアップ成功
            FirebaseUser newUser = task.Result;
            Debug.LogFormat("SignUp success: {0} ({1})",
                newUser.DisplayName, newUser.UserId);
        });
    }

最低限の実装例になります。例外処理は必ず組み込むようにしましょう。成功するとIDと名前が表示されます。

既存のEメールアカウントでログインする

使用する関数が違うだけで中身はほぼ一緒です。 上のSignUpは既に存在するアドレスを入力するとエラーになります。登録済みのアドレスにログインする場合はこちらを使います。

/// <summary>
    /// 既存アカウントへのログイン
    /// </summary>
    public void SignIn(string email, string password)
    {
        auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignIn canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignIn error: " + task.Exception);
                return;
            }

            // サインイン成功
            FirebaseUser user = task.Result;
            Debug.LogFormat("SignIn success: {0} ({1})",
                user.DisplayName, user.UserId);
        });
    }

パスワード再設定メールの送信

パスワードを忘れた時、再設定したい時などにパスワードをリセットするメールを送信する事ができます。メールアドレスを忘れてしまったら・・・どうにもなりません・・・ 下記のようなコードでメールを送信できます。細かな設定をしなくてもグーグルのサーバーから送信されます。

/// <summary>
    /// パスワードリセット用のメールを送信する
    /// </summary>
    public void SendPasswordResetEmail(string email)
    {
        auth.SendPasswordResetEmailAsync(email).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SendPasswordResetEmail canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SendPasswordResetEmail error: " + task.Exception);
                return;
            }

            // パスワード再設定メールの送信成功
            Debug.Log("SendPasswordResetEmail success.");
        });
    }

このようなメールが登録した自分のアドレスに届きます。また、自分のドメインを持っている人は送信元のドメイン名を自分の物にする事もできます。無くても構いません。その場合はgoogleのドメインで送られます。より細かな設定をしたい人はFirebaseサイトやドキュメントを読んで下さい。 ResetMail

上記のリンクをクリック(タップ)すると次のようなお馴染みの画面になります。 ResetMail

全コード紹介

using UnityEngine;
using Firebase.Auth;

public class FirebaseEmailAuth : MonoBehaviour
{
    FirebaseAuth auth => FirebaseInit.auth;

    /// <summary>
    /// 新規email認証アカウントを作成する
    /// </summary>
    public void SignUp(string email, string password)
    {
        auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignUp canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignUp error: " + task.Exception);
                return;
            }

            // サインアップ成功
            FirebaseUser newUser = task.Result;
            Debug.LogFormat("SignUp success: {0} ({1})",
                newUser.DisplayName, newUser.UserId);
        });
    }
    /// <summary>
    /// 既存アカウントへのログイン
    /// </summary>
    public void SignIn(string email, string password)
    {
        auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SignIn canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SignIn error: " + task.Exception);
                return;
            }

            // サインイン成功
            FirebaseUser user = task.Result;
            Debug.LogFormat("SignIn success: {0} ({1})",
                user.DisplayName, user.UserId);
        });
    }
    /// <summary>
    /// サインアウト
    /// </summary>
    public void SignOut()
    {
        auth.SignOut();
        Debug.Log("SignOut success.");
    }
    /// <summary>
    /// パスワードリセット用のメールを送信する
    /// </summary>
    public void SendPasswordResetEmail(string email)
    {
        auth.SendPasswordResetEmailAsync(email).ContinueWith(task =>
        {
            if (task.IsCanceled)
            {
                Debug.LogError("SendPasswordResetEmail canceled.");
                return;
            }
            if (task.IsFaulted)
            {
                Debug.LogError("SendPasswordResetEmail error: " + task.Exception);
                return;
            }

            // パスワード再設定メールの送信成功
            Debug.Log("SendPasswordResetEmail success.");
        });
    }
}

以上、簡単ではありますが、Firebaseを使った匿名認証、Eメール認証のUnityへの実装方法の紹介でした。






このサイトをシェアする