iT邦幫忙

2024 iThome 鐵人賽

DAY 5
1
Software Development

Unity使用教學系列 第 5

Unity_使用 Firebase Realtime Database 建立會員系統

  • 分享至 

  • xImage
  •  

前言
在許多應用程式中,會員系統是不可或缺的功能之一。無論是遊戲、商務應用,還是社群平台,都需要會員管理系統來處理用戶註冊、登錄和數據存儲。今天我會介紹如何使用 Firebase Realtime Database 和 Firebase Authentication 來打造一個簡單的會員系統。

流程步驟
1. 設置 Firebase 專案

  • 首先,我們需要在 Firebase 控制台創建一個新專案:
  • 前往 Firebase 控制台 並創建一個新專案。
  • 進入專案後,選擇 "Authentication"(身份驗證),開啟 "Sign-in method"(登入方式),並啟用 "Email/Password" 登入。

2. 導入 Firebase SDK 到 Unity

  • 在 Unity 中,下載並導入 Firebase SDK:
  • 前往 Firebase Unity SDK 下載並導入最新的 Firebase SDK。
  • 安裝好後,從 Assets -> Import Package -> Custom Package 中選擇 Firebase SDK,選擇 Firebase Auth 和 Firebase Database 模組。
    https://ithelp.ithome.com.tw/upload/images/20240919/20169437N7QLg2pmRa.png

3. Firebase Authentication 實作
在 Unity 中,我們使用 Firebase Authentication 來實現用戶的註冊和登入功能。

用戶註冊範例:

using Firebase.Auth;
using UnityEngine;

public class FirebaseAuthManager : MonoBehaviour
{
    FirebaseAuth auth;

    void Start()
    {
        auth = FirebaseAuth.DefaultInstance;
    }

    public void RegisterUser(string email, string password)
    {
        auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
            if (task.IsCanceled || task.IsFaulted)
            {
                Debug.LogError("Registration failed.");
                return;
            }

            FirebaseUser newUser = task.Result;
            Debug.Log($"User registered: {newUser.Email}");
            // 註冊成功後可以將用戶資料寫入 Realtime Database
            SaveUserDataToDatabase(newUser);
        });
    }

    void SaveUserDataToDatabase(FirebaseUser user)
    {
        // 待會會詳細介紹如何實作此方法
    }
}

用戶登入範例:

public void LoginUser(string email, string password)
{
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
        if (task.IsCanceled || task.IsFaulted)
        {
            Debug.LogError("Login failed.");
            return;
        }

        FirebaseUser user = task.Result;
        Debug.Log($"User logged in: {user.Email}");
    });
}

4. 使用 Firebase Realtime Database 存儲會員資料
註冊用戶成功後,我們可以將會員的相關資料(如用戶名、電子郵件、註冊日期等)存儲到 Firebase Realtime Database 中。

存儲會員資料範例:

using Firebase.Database;
using Firebase.Auth;

public void SaveUserDataToDatabase(FirebaseUser user)
{
    DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;

    User newUser = new User(user.Email, System.DateTime.Now.ToString());
    string json = JsonUtility.ToJson(newUser);

    reference.Child("users").Child(user.UserId).SetRawJsonValueAsync(json).ContinueWith(task => {
        if (task.IsCompleted)
        {
            Debug.Log("User data saved to database.");
        }
        else
        {
            Debug.LogError("Failed to save user data.");
        }
    });
}

[System.Serializable]
public class User
{
    public string email;
    public string registrationDate;

    public User(string email, string registrationDate)
    {
        this.email = email;
        this.registrationDate = registrationDate;
    }
}

5. 從 Firebase Realtime Database 獲取會員資料
當用戶登錄後,我們可以從 Realtime Database 中讀取該會員的資料,並顯示在應用程式中。
讀取會員資料範例:

public void GetUserData(string userId)
{
    DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;

    reference.Child("users").Child(userId).GetValueAsync().ContinueWith(task => {
        if (task.IsCompleted && task.Result != null)
        {
            DataSnapshot snapshot = task.Result;
            User user = JsonUtility.FromJson<User>(snapshot.GetRawJsonValue());
            Debug.Log($"User email: {user.email}, Registration Date: {user.registrationDate}");
        }
        else
        {
            Debug.LogError("Failed to retrieve user data.");
        }
    });
}

6. Firebase Realtime Database 規則設置
默認情況下,Firebase Realtime Database 的讀寫操作可能受到權限限制。開發過程中,我們可以在 Firebase 控制台的 "Database" 中設置簡單的規則來允許所有讀寫操作(僅供開發測試用)。

開發時測試規則範例:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

這表示只有已通過身份驗證的用戶才可以讀取和寫入資料。

成品
https://ithelp.ithome.com.tw/upload/images/20240920/201694370avJ56kfES.png

可能遇到的問題及解決方法
1. Firebase SDK 無法正確導入:

  • 確保使用的是與 Unity 版本相容的 Firebase SDK,可以google官方文件確認支持版本。
  • 如果 SDK 安裝失敗,可以重新導入並檢查是否有缺少的依賴項。

2. Firebase Authentication 註冊/登錄失敗:

  • 確認 Firebase 控制台中已啟用 "Email/Password" 或其他登錄方式。
  • 檢查用戶輸入的郵件和密碼格式是否符合 Firebase 的要求。

3. 無法連接到 Firebase Realtime Database:

  • 確保你的 Firebase Database 規則,允許進行讀寫操作。
  • 檢查是否正確配置了 Firebase 專案的 google-services.json 或 GoogleService-Info.plist 文件。

結語
透過 Firebase Realtime Database 和 Firebase Authentication,我們可以快速實現一個基本的會員系統,並即時同步會員資料,讓我們的應用有雲端數據管理的能力。

如果有其他問題或進一步的需求,歡迎在留言區討論!


上一篇
Unity連接Firebase_Messaging
下一篇
Unity_如何設置 Firebase Realtime Database 的安全規則
系列文
Unity使用教學12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言