Bắt đầu xác thực Firebase trong Unity

Bạn có thể sử dụng tính năng Xác thực Firebase để cho phép người dùng đăng nhập vào trò chơi bằng một hoặc nhiều phương thức đăng nhập, trong đó có địa chỉ email và đăng nhập bằng mật khẩu cũng như các nhà cung cấp danh tính được liên kết như Đăng nhập bằng Google và Đăng nhập Facebook. Hướng dẫn này giúp bạn bắt đầu tính năng Xác thực Firebase bằng cách thêm thông tin đăng nhập bằng địa chỉ email và mật khẩu vào trò chơi.

Trước khi bắt đầu

Trước khi có thể sử dụng tính năng Xác thực Firebase, bạn cần:

  • Đăng ký dự án Unity của bạn và định cấu hình dự án đó để sử dụng Firebase.

    • Nếu dự án Unity của bạn sử dụng Firebase, thì tức là dự án đó đã được đăng ký và định cấu hình cho Firebase.

    • Nếu không có dự án Unity, bạn có thể tải ứng dụng mẫu xuống.

  • Thêm SDK Unity của Firebase (cụ thể là FirebaseAuth.unitypackage) vào dự án Unity.

Lưu ý rằng việc thêm Firebase vào dự án Unity bao gồm các tác vụ trong cả bảng điều khiển của Firebase và trong dự án Unity đang mở (ví dụ: bạn tải tệp cấu hình Firebase xuống từ bảng điều khiển, sau đó di chuyển chúng vào dự án Unity).

Đăng ký người dùng mới

Tạo biểu mẫu cho phép người dùng mới đăng ký trò chơi của bạn bằng cách sử dụng địa chỉ email và mật khẩu của họ. Khi người dùng hoàn tất biểu mẫu, hãy xác thực địa chỉ email và mật khẩu do người dùng cung cấp, sau đó truyền các thông tin đó đến phương thức 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.AuthResult result = task.Result;
  Debug.LogFormat("Firebase user created successfully: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

Đăng nhập người dùng hiện có

Tạo biểu mẫu cho phép người dùng hiện tại đăng nhập bằng địa chỉ email và mật khẩu của họ. Khi người dùng hoàn tất biểu mẫu, hãy gọi phương thức 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.AuthResult result = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

Thiết lập trình xử lý sự kiện thay đổi trạng thái xác thực và nhận dữ liệu người dùng

Để phản hồi các sự kiện đăng nhập và đăng xuất, hãy đính kèm một trình xử lý sự kiện vào đối tượng xác thực chung. Trình xử lý này được gọi bất cứ khi nào trạng thái đăng nhập của người dùng thay đổi. Vì trình xử lý chỉ chạy sau khi đối tượng xác thực được khởi chạy hoàn toàn và sau khi mọi lệnh gọi mạng hoàn tất, nên đó là nơi tốt nhất để nhận thông tin về người dùng đã đăng nhập.

Đăng ký trình xử lý sự kiện bằng cách sử dụng trường StateChanged của đối tượng FirebaseAuth. Khi người dùng đăng nhập thành công, bạn có thể nhận thông tin về người dùng đó trong trình xử lý sự kiện.

Cuối cùng, khi đối tượng này yêu cầu Destroy, đối tượng này sẽ tự động gọi OnDestroy. Dọn dẹp các lượt tham chiếu của đối tượng Xác thực trong OnDestroy.

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
        && auth.CurrentUser.IsValid();
    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 ?? "";
    }
  }
}

void OnDestroy() {
  auth.StateChanged -= AuthStateChanged;
  auth = null;
}

Các bước tiếp theo

Tìm hiểu cách thêm tính năng hỗ trợ cho các nhà cung cấp danh tính khác và tài khoản khách ẩn danh: