在 Android 上匿名进行 Firebase 身份验证

您可以用 Firebase 身份验证功能创建和使用临时匿名帐号来进行 Firebase 身份验证。借助这些临时匿名帐号,尚未注册您应用的用户也可以处理受安全规则保护的数据。如果匿名用户决定注册您的应用,您可以将其登录凭据与其匿名帐号关联,这样他们就可以在以后的会话中继续处理其受保护的数据了。

开始前的准备工作

  1. 将 Firebase 添加到您的 Android 项目
  2. 将 Firebase 身份验证的依赖项添加至您的应用级 build.gradle 文件:
    implementation 'com.google.firebase:firebase-auth:16.0.3'
  3. 如果您尚未将应用关联到 Firebase 项目,请从 Firebase 控制台关联。
  4. 启用匿名身份验证:
    1. Firebase 控制台中,打开 Auth(身份验证)部分。
    2. 登录方法页面中,启用匿名登录方法。

匿名进行 Firebase 身份验证

要使未登录的用户能够使用需要进行 Firebase 身份验证的应用功能,您可以按以下步骤操作,让用户匿名登录:

  1. 在您的 Activity 的 onCreate 方法中,获取 FirebaseAuth 对象的共享实例:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  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);
    }
    
  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);
                    }
    
                    // ...
                }
            });
    
    如果登录成功,您可以使用 getCurrentUser 方法来获取用户的帐号数据。

将匿名帐号转成永久帐号

当匿名用户注册您的应用时,您可能需要允许其使用新帐号继续之前的操作。例如,您可能需要将用户在注册之前添加到购物车中的商品移到其新帐号的购物车中。为此,请完成以下步骤:

  1. 当用户注册时,按照用户身份验证提供方的登录流程逐步进行,直到需要调用某一 FirebaseAuth.signInWith 方法时停止。调用的例子包括:获取用户的 Google ID 令牌、Facebook 访问令牌或电子邮件地址和密码。
  2. 为新身份验证提供方获取 AuthCredential

    Google 登录
    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    
    Facebook 登录
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    
    电子邮件地址/密码登录
    AuthCredential 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);
                    }
    
                    // ...
                }
            });
    

如果对 linkWithCredential 的调用成功,用户的新帐号就可以使用匿名帐号的 Firebase 数据了。

后续步骤

至此,用户可以进行 Firebase 身份验证,而您也可以使用 Firebase 规则控制用户对您 Firebase 数据库中的数据的访问权限。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面