在Android中的Firebase Google身份验证中,首次检查用户是否首次通过身份验证

rai*_*man 32 android firebase firebase-authentication

我在Android应用程序中使用Firebase身份验证,我使用Google帐户身份验证作为登录应用程序的选项.

如何知道用户是否首次登录该应用程序?

Eri*_*icT 32

要检查是否是用户首次登录,只需AdditionalUserInfo.isNewUser()OnCompleteListener.onComplete回调中调用该方法即可.

下面的示例代码,请务必检查null.

OnCompleteListener<AuthResult> completeListener = new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                boolean isNew = task.getResult().getAdditionalUserInfo().isNewUser();
                Log.d("MyTAG", "onComplete: " + (isNew ? "new user" : "old user"));
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

查看文档以获取更多参考 AdditionalUserInfo


kip*_*ip2 9

Firebase-ui文档中,您可以按照创建时的时间戳检查上次登录时间戳,如下所示:

FirebaseUserMetadata metadata = auth.getCurrentUser().getMetadata();
if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp()) {
    // The user is new, show them a fancy intro screen!
} else {
    // This is an existing user, show them a welcome back screen.
}
Run Code Online (Sandbox Code Playgroud)

  • 对于我的 Google 登录,这些返回间隔为 2 毫秒,这是不可靠的。它仅按预期用于电子邮件身份验证。 (5认同)

小智 6

根据Firebase auth(16.0.1)的新版本,AuthResult类具有一个成员函数,其结果为true或false(如果用户是新用户)。假设在范围内定义了“凭据”(它是google凭据)。一个例子如下所示:

private FirebaseAuth mAuth;

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

mAuth = FirebaseAuth.getInstance();
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
GoogleSignInAccount acct = task.getResult(ApiException.class);
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);

mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");


                        boolean newuser = task.getResult().getAdditionalUserInfo().isNewUser();



                        if(newuser){

                             //Do Stuffs for new user

                         }else{

                            //Continue with Sign up 
                        }

                    } else {

                        Toast.makeText(MyClass.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();

                    }


            });
Run Code Online (Sandbox Code Playgroud)

感谢firebase :)


Mys*_*cZA 6

对于Web版本 9.0(模块化):

您将需要导入“getAdditionalUserInfo”并这样调用它:

signInWithPopup(firebaseAuth, provider)
  .then((result) => {
    const details = getAdditionalUserInfo(result)
    console.log(details.isNewUser);
  })
  .catch((error) => {
    console.log(error);
  });
Run Code Online (Sandbox Code Playgroud)

返回的详细信息包括“ isNewUser ”布尔属性。

2021 年 8 月起 GitHub 上的详细信息