開始使用 C++ 中的 Firebase 身份驗證

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

將您的 C++ 項目連接到 Firebase

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

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

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

  • 添加火力地堡C ++ SDK到C ++項目。

注意添加火力地堡到C ++項目既包括在任務火力地堡控制台,並在您打開C ++項目(例如,您從控制台下載火力地堡的配置文件,然後將其移動到你的C ++項目)。

註冊新用戶

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

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

您可以通過註冊上一個回調確認帳戶創建操作的狀態CreateUserWithEmailAndPasswordLastResult Future對象,或者,如果你正在寫一個遊戲或應用程序以某種週期性更新循環的,通過輪詢的更新循環的狀態。

例如,使用 Future:

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

// The lambda has the same signature as the callback function.
result.OnCompletion(
    [](const firebase::Future<firebase::auth::User*>& 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);

或者,要使用輪詢,請在遊戲的更新循環中執行類似於以下示例的操作:

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

登錄現有用戶

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

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

以獲取註冊結果的方式獲取登錄操作的結果。

設置身份驗證狀態偵聽器並獲取帳戶數據

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

通過實現創建監聽firebase::auth::AuthStateListener抽象類。例如,要創建一個偵聽器以在用戶成功登錄時獲取有關用戶的信息:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      // 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");
    }
    // ...
  }
};

與裝上監聽firebase::auth::Auth對象的AddAuthStateListener方法:

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

下一步

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