本頁面由 Cloud Translation API 翻譯而成。
Switch to English

C ++中的Firebase認證入門

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

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

在使用Firebase身份驗證之前,您需要:

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

    如果您的C ++項目已經使用Firebase,則說明它已經為Firebase註冊並配置了。

  • 在項目級別的build.gradle文件中,確保在buildscriptallprojects部分中都包含Google的Maven存儲庫。

  • Firebase C ++ SDK添加到您的C ++項目中。

請注意,將Firebase添加到您的C ++項目中涉及在Firebase控制台和打開的C ++項目中的任務(例如,您從控制台下載Firebase配置文件,然後將其移入C ++項目)。

註冊新用戶

創建一個允許新用戶使用其電子郵件地址和密碼向您的應用程序註冊的表單。用戶填寫表單後,請驗證用戶提供的電子郵件地址和密碼,然後將它們傳遞給CreateUserWithEmailAndPassword方法:

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

您可以通過在CreateUserWithEmailAndPasswordLastResult 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");
    }
    // ...
  }
};

使用AddAuthStateListener firebase::auth::Auth對象的AddAuthStateListener方法附加偵聽器:

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

下一步

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