Bắt đầu với Xác thực Firebase trong C++

Bạn có thể sử dụng Xác thực Firebase để cho phép người dùng đăng nhập vào ứng dụng của mình bằng một hoặc nhiều phương thức đăng nhập, bao gồm đăng nhập bằng địa chỉ email và mật khẩu cũng như các nhà cung cấp danh tính 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 với Xác thực Firebase bằng cách chỉ cho bạn cách thêm địa chỉ email và đăng nhập mật khẩu vào ứng dụng của mình.

Kết nối dự án C++ của bạn với Firebase

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

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

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

  • Thêm SDK Firebase C++ vào dự án C++ của bạn.

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

Đă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ý ứng dụng của bạn bằng địa chỉ email và mật khẩu của họ. Khi người dùng hoàn thành 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 đó chuyển chúng sang phương thức CreateUserWithEmailAndPassword :

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPassword(email, password);

Bạn có thể kiểm tra trạng thái của hoạt động tạo tài khoản bằng cách đăng ký lệnh gọi lại trên đối tượng CreateUserWithEmailAndPasswordLastResult Future hoặc nếu bạn đang viết trò chơi hoặc ứng dụng với một loại vòng lặp cập nhật định kỳ nào đó, hãy thăm dò trạng thái trong vòng lặp cập nhật.

Ví dụ: sử dụng Tương lai:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::AuthResult>& result,
       void* user_data) {
      // `user_data` is the same as &my_program_context, below.
      // Note that we can't capture this value in the [] because std::function
      // is not supported by our minimum compiler spec (which is pre C++11).
      MyProgramContext* program_context =
          static_cast<MyProgramContext*>(user_data);

      // Process create user result...
      (void)program_context;
    },
    &my_program_context);

Hoặc, để sử dụng tính năng thăm dò ý kiến, hãy thực hiện một số thao tác giống như ví dụ sau trong vòng lặp cập nhật trò chơi của bạn:

firebase::Future<firebase::auth::AuthResult> result =
    auth->CreateUserWithEmailAndPasswordLastResult();
if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::auth::kAuthErrorNone) {
    firebase::auth::AuthResult* auth_result = *result.result();
    printf("Create user succeeded for email %s\n", auth_result.user.email().c_str());
  } else {
    printf("Created user failed with error '%s'\n", result.error_message());
  }
}

Đăng nhập người dùng hiện tại

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 thành biểu mẫu, hãy gọi phương thức SignInWithEmailAndPassword :

firebase::Future<firebase::auth::AuthResult> result =
    auth->SignInWithEmailAndPassword(email, password);

Nhận kết quả của thao tác đăng nhập giống như cách bạn nhận được kết quả đăng ký.

Đặt trình xử lý trạng thái xác thực và nhận dữ liệu tài khoản

Để phản hồi các sự kiện đăng nhập và đăng xuất, hãy đính kèm trình nghe vào đối tượng xác thực chung. Trình nghe 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. Bởi vì trình nghe chỉ chạy sau khi đối tượng xác thực được khởi tạo hoàn toàn và sau khi bất kỳ cuộc gọi mạng nào đã hoàn thành, đây là nơi tốt nhất để lấy thông tin về người dùng đã đăng nhập.

Tạo trình nghe bằng cách triển khai lớp trừu tượng firebase::auth::AuthStateListener . Ví dụ: để tạo trình nghe nhận thông tin về người dùng khi người dùng đăng nhập thành công:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth.current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
      const std::string displayName = user.DisplayName();
      const std::string emailAddress = user.Email();
      const std::string photoUrl = user.PhotoUrl();
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};

Đính kèm trình nghe bằng phương thức AddAuthStateListener của đối tượng firebase::auth::Auth :

MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

Bước tiếp theo

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