Catch up on everthing we announced at this year's Firebase Summit. Learn more

在 Android 上匿名使用 Firebase 進行身份驗證

您可以使用 Firebase 身份驗證來創建和使用臨時匿名帳戶向 Firebase 進行身份驗證。這些臨時匿名帳戶可用於允許尚未註冊您的應用程序的用戶使用受安全規則保護的數據。如果匿名用戶決定申請到您的應用程序,你可以聯繫他們的登錄憑據匿名帳戶,以便他們可以繼續工作,在今後的會議所保護的數據。

在你開始之前

  1. 如果你還沒有,添加火力地堡到您的Android項目
  2. 使用火力地堡Android的物料清單,聲明你的模塊(應用程序級)搖籃文件(通常為火力地堡認證的Android庫的依賴app/build.gradle )。

    爪哇

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    通過使用火力地堡Android的物料清單,您的應用程序將始終使用火力地堡的Android庫的兼容版本。

    (替代)聲明火力地堡庫依賴使用物料清單

    如果您選擇不使用 Firebase BoM,則必須在其依賴項行中指定每個 Firebase 庫版本。

    需要注意的是,如果你在你的應用程序使用多個火力地堡庫,我們強烈建議您使用的物料清單管理庫版本,以保證所有版本相互兼容。

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.0.1'
    }
    

    科特林+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    通過使用火力地堡Android的物料清單,您的應用程序將始終使用火力地堡的Android庫的兼容版本。

    (替代)聲明火力地堡庫依賴使用物料清單

    如果您選擇不使用 Firebase BoM,則必須在其依賴項行中指定每個 Firebase 庫版本。

    需要注意的是,如果你在你的應用程序使用多個火力地堡庫,我們強烈建議您使用的物料清單管理庫版本,以保證所有版本相互兼容。

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'
    }
    
  3. 如果您還沒有連接您的應用程序到你的火力地堡項目,從這樣做火力地堡控制台
  4. 啟用匿名身份驗證:
    1. 火力地堡控制台,打開驗證部分。
    2. 登錄的方法頁面上,啟用匿名登錄方法。

匿名使用 Firebase 進行身份驗證

當註銷的用戶使用需要通過 Firebase 進行身份驗證的應用功能時,請完成以下步驟以匿名登錄用戶:

  1. 在您的活動的onCreate方法,得到的共享實例FirebaseAuth對象:

    爪哇

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    科特林+KTX

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth
  2. 初始化您的 Activity 時,請檢查用戶當前是否已登錄:

    爪哇

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    科特林+KTX

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  3. 最後,調用signInAnonymously登錄為匿名用戶:

    爪哇

    mAuth.signInAnonymously()
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInAnonymously:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInAnonymously:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

    科特林+KTX

    auth.signInAnonymously()
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInAnonymously:success")
                    val user = auth.currentUser
                    updateUI(user)
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInAnonymously:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }
    如果登錄成功,你可以使用getCurrentUser方法來獲取用戶的帳戶數據。

將匿名帳戶轉換為永久帳戶

當匿名用戶註冊您的應用程序時,您可能希望允許他們使用新帳戶繼續工作——例如,您可能希望用戶在註冊之前添加到他們的購物車中的商品在新帳戶中可用帳戶的購物車。為此,請完成以下步驟:

  1. 當用戶註冊,完成登錄流程為用戶的身份驗證提供最多,但不包括調用的一個FirebaseAuth.signInWith方法。例如,獲取用戶的 Google ID 令牌、Facebook 訪問令牌或電子郵件地址和密碼。
  2. 找一個AuthCredential新身份驗證提供:

    谷歌登錄

    爪哇

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    科特林+KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    Facebook登入

    爪哇

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    科特林+KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    電子郵件密碼登錄

    爪哇

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    科特林+KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  3. 傳遞AuthCredential對象的登錄用戶的linkWithCredential方法:

    爪哇

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

    科特林+KTX

    auth.currentUser!!.linkWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    Log.d(TAG, "linkWithCredential:success")
                    val user = task.result?.user
                    updateUI(user)
                } else {
                    Log.w(TAG, "linkWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }

如果調用linkWithCredential成功,用戶的新帳戶可以訪問匿名帳戶的火力地堡數據。

下一步

現在,用戶可以與火力地堡進行身份驗證,就可以控制他們使用你的火力地堡數據庫中的數據訪問火力地堡規則