使用 C++ 以匿名方式進行 Firebase 驗證

您可以使用 Firebase 驗證來建立暫時匿名帳戶,並使用 Firebase 進行驗證。這些臨時匿名帳戶可用於讓尚未註冊您應用程式的使用者,使用受安全性規則保護的資料。如果匿名使用者決定註冊您的應用程式,您可以將他們的登入憑證連結至匿名帳戶,方便他們在日後的工作階段中繼續使用已保護的資料。

事前準備

  1. 將 Firebase 新增至您的 C++ 專案
  2. 如果您尚未將應用程式連結至 Firebase 專案,請透過 Firebase 控制台進行。
  3. 啟用匿名驗證功能:
    1. Firebase 控制台開啟「驗證」專區。
    2. 在「Sign-in Methods」頁面中,啟用「Anonymous」登入方式。
    3. 選用:如果您已將專案升級為透過 Identity Platform 使用 Firebase 驗證,可以啟用自動清理功能。啟用這項設定後,系統會自動刪除 30 天前的匿名帳戶。如果專案已啟用自動清理功能,匿名驗證就不會計入用量限製或帳單配額。請參閱自動清除一節。

透過 Firebase 匿名驗證

當登出的使用者使用需要透過 Firebase 進行驗證的應用程式功能時,請完成下列步驟,以匿名的方式登入使用者:

Auth 類別是所有 API 呼叫的閘道,
  1. 新增 Auth 和應用程式標頭檔案:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. 在初始化程式碼中,建立 firebase::App 類別。
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. 取得 firebase::Appfirebase::auth::Auth 類別。AppAuth 之間有一對一的對應關係。
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
  • 呼叫 Auth::SignInAnonymously
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymously();
    
  • 如果程式的更新迴圈會定期執行 (例如每秒 30 或 60 次),您可以使用 Auth::SignInAnonymouslyLastResult 在每次更新時檢查一次結果:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAnonymouslyLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::AuthResult auth_result = *result.result();
        printf("Sign in succeeded for `%s`\n",
               auth_result.user.display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    。或者,如果您的程式是以事件驅動,也許可以在 Future 上註冊回呼
  • 將匿名帳戶轉換為永久帳戶

    當您匿名使用者註冊您的應用程式時,您可能會想讓他們透過新帳戶繼續完成工作;舉例來說,您可能希望在使用者註冊使用新帳戶的購物車前,將他們加入購物車的商品加入購物車。如要這樣做,請完成下列步驟:

    1. 使用者註冊時,請完成使用者驗證服務供應商的登入流程,但不含呼叫其中一個 Auth::SignInWith 方法。例如,取得使用者的 Google ID 權杖、Facebook 存取權杖,或電子郵件地址和密碼。
    2. 取得新驗證供應商的 auth::Credential

      Google 登入
      firebase::auth::Credential credential =
          firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                            nullptr);
      
      Facebook 登入
      firebase::auth::Credential credential =
          firebase::auth::FacebookAuthProvider::GetCredential(access_token);
      
      電子郵件密碼登入
      firebase::auth::Credential credential =
          firebase::auth::EmailAuthProvider::GetCredential(email, password);
      
    3. auth::Credential 物件傳遞至登入使用者的 LinkWithCredential 方法:

      // Link the new credential to the currently active user.
      firebase::auth::User current_user = auth->current_user();
      firebase::Future<firebase::auth::AuthResult> result =
          current_user.LinkWithCredential(credential);
      

    如果呼叫 LinkWithCredential 成功,使用者的新帳戶可以存取匿名帳戶的 Firebase 資料。

    自動清理

    如果您已將專案升級為透過 Identity Platform 使用 Firebase 驗證,即可在 Firebase 控制台啟用自動清除功能。啟用這項功能即代表您允許 Firebase 自動刪除 30 天前的匿名帳戶。如果專案已啟用自動清理功能,匿名驗證就不會計入用量限製或帳單配額。

    • 啟用自動清理功能之後,建立的所有匿名帳戶可能會在建立 30 天後自動刪除。
    • 啟用自動清除功能後,現有的匿名帳戶會在 30 天後自動刪除。
    • 停用自動清除功能後,所有已排定刪除的匿名帳戶都會維持排定的刪除狀態。
    • 如果您以連結任何登入方式「升級」匿名帳戶,系統不會自動刪除該帳戶。

    如果您想在啟用這項功能前瞭解會受到影響的使用者人數,並已將專案升級至透過 Identity Platform 進行 Firebase 驗證,可以在 Cloud Logging 中使用 is_anon 進行篩選。

    後續步驟

    現在使用者可以透過 Firebase 進行驗證,因此您可以使用 Firebase 規則控管他們對 Firebase 資料庫資料的存取權。