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

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

事前準備

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

透過 Firebase 匿名驗證

使用者在未登入狀態下使用需要進行身分驗證的應用程式功能時 Firebase 完成下列步驟,以匿名方式登入使用者:

Auth 類別是所有 API 呼叫的閘道,
  1. 新增驗證與應用程式標頭檔案:
    #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) 每秒可執行 1 次 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 資料。

    自動清理

    如果您已將專案升級至 Firebase Authentication with Identity Platform,即可 請在 Firebase 控制台中啟用自動清除功能。啟用這項功能即表示您允許 Firebase 會自動刪除建立至今超過 30 天的匿名帳戶。在採用自動變更功能的專案中 啟用清理功能,匿名驗證不會計入用量限製或計費配額。

    • 啟用自動清除功能後,系統可能會自動提出任何匿名帳戶 建立後 30 天即可刪除。
    • 現有的匿名帳戶可在 30 天後自動刪除 啟用自動清理功能。
    • 如果您關閉自動清理功能,任何已排定刪除的匿名帳戶都會保留下來 排定刪除作業。
    • 如「升級」連結至任何登入方式來匿名帳戶 而不是自動刪除

    如要在啟用這項功能前,查看有多少使用者會受到影響,並 專案已升級至 Firebase Authentication with Identity Platform,並依據下列條件進行篩選: 雲端中的 is_anon 記錄

    後續步驟

    使用者現在可以透過 Firebase 進行驗證,因此你可以控管他們 訓練資料使用 Firebase 規則