在 Unity 中開始使用 Firebase 身份驗證

您可以使用 Firebase 身份驗證來允許用戶使用一種或多種登錄方法(包括電子郵件地址和密碼登錄)以及聯合身份提供商(例如 Google 登錄和 Facebook 登錄)登錄您的遊戲。本教程通過向您展示如何將電子郵件地址和密碼登錄添加到您的遊戲,從而幫助您開始使用 Firebase 身份驗證。

在你開始之前

之前,你可以用火力地堡認證,您需要:

  • 註冊您的 Unity 項目並將其配置為使用 Firebase。

    • 如果您的 Unity 項目已經使用 Firebase,那麼它已經為 Firebase 註冊和配置。

    • 如果你沒有一個統一的項目,你可以下載一個示例應用程序

  • 添加火力地堡統一SDK (具體FirebaseAuth.unitypackage )到您的統一項目。

注意添加火力地堡到您的統一項目涉及雙方的任務火力地堡控制台並在打開的統一的項目(例如,您從控制台下載火力地堡的配置文件,然後將其移動到您的統一項目)。

註冊新用戶

創建一個表單,允許新用戶使用他們的電子郵件地址和密碼註冊您的遊戲。當用戶完成該表格,驗證由用戶提供的電子郵件地址和密碼,然後將它們傳遞到CreateUserWithEmailAndPasswordAsync方法:

auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
    return;
  }

  // Firebase user has been created.
  Firebase.Auth.FirebaseUser newUser = task.Result;
  Debug.LogFormat("Firebase user created successfully: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});

登錄現有用戶

創建一個表單,允許現有用戶使用他們的電子郵件地址和密碼登錄。當用戶完成該表格,調用SignInWithEmailAndPasswordAsync方法:

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;
  }

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

設置身份驗證狀態更改事件處理程序並獲取用戶數據

要響應登錄和註銷事件,請將事件處理程序附加到全局身份驗證對象。只要用戶的登錄狀態發生變化,就會調用此處理程序。因為處理程序僅在身份驗證對象完全初始化和任何網絡調用完成後運行,所以它是獲取有關登錄用戶的信息的最佳位置。

註冊使用的事件處理程序FirebaseAuth對象的StateChanged場。當用戶成功登錄時,您可以在事件處理程序中獲取有關用戶的信息。

void InitializeFirebase() {
  auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  auth.StateChanged += AuthStateChanged;
  AuthStateChanged(this, null);
}

void AuthStateChanged(object sender, System.EventArgs eventArgs) {
  if (auth.CurrentUser != user) {
    bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null;
    if (!signedIn && user != null) {
      DebugLog("Signed out " + user.UserId);
    }
    user = auth.CurrentUser;
    if (signedIn) {
      DebugLog("Signed in " + user.UserId);
      displayName = user.DisplayName ?? "";
      emailAddress = user.Email ?? "";
      photoUrl = user.PhotoUrl ?? "";
    }
  }
}

下一步

了解如何添加對其他身份提供商和匿名訪客帳戶的支持: