acct.getId()和mFirebaseUser.getUid()有什么区别?

时间:2019-04-24 18:17:52

标签: android firebase firebase-realtime-database firebase-authentication google-signin

我正在尝试将用户数据保存到Firebase实时数据库中,并且使用了Google登录身份验证。因此,在创建用户节点树时,我想存储“ Users>” uid“> userdata之类的数据。如何获得已验证用户的Uid?通过acct.getId()[acct是GoogleSignInAccount对象]或user.getUid()[用户是FirebaseUser对象]吗? 代码从这里开始:

 private void firebaseAuthWithGoogle (final GoogleSignInAccount acct) {
    Log.d("TAG", "firebaseAuthWithGoogle:" + acct.getId());


    final DatabaseReference rootRef;
    rootRef = FirebaseDatabase.getInstance().getReference();

    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()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d("TAG", "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();

                        if (acct != null) {
                            personName = acct.getDisplayName();
                            uid=user.getUid();
                            uid1=acct.getId();
                            HashMap<String,Object> userdatamap = new HashMap<>();
                            userdatamap.put("firstName",personName);
                            userdatamap.put("email",acct.getEmail());
                            rootRef.child("Users").child(/* uid */).updateChildren(userdatamap)
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if(task.isSuccessful()){
                                                Toast.makeText(login.this,"DONE",Toast.LENGTH_SHORT).show();
                                            }
                                        }
                                    });

                            pref = getApplicationContext().getSharedPreferences("userinfo",0);
                            editor = pref.edit();
                            editor.putString("namekey",personName);
                            editor.commit();
                            Toast.makeText(login.this,"Welcome "+personName,Toast.LENGTH_SHORT).show();

                        }
                        else {
                            Toast.makeText(login.this,"Profile Name Not Found",Toast.LENGTH_SHORT).show();
                        }
                        //updateUI(user);

                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w("TAG", "signInWithCredential:failure", task.getException());
                        Toast.makeText(login.this,"Auth Failed",Toast.LENGTH_SHORT).show();
                        //updateUI(null);
                    }

                    // ...
                }
            });
}

1 个答案:

答案 0 :(得分:0)

GoogleSignInAccount的getId()

  

如果您从`new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)或配置了requestId()开始构建配置,则返回Google帐户的唯一ID;否则为null。

     

这是用于用户记录的首选唯一键。

FirebaseUser的getUid()时:

  

返回一个字符串,用于在Firebase项目的用户数据库中唯一标识您的用户。在Firebase数据库或存储中甚至在您自己的后端中存储信息时,请使用它。

     

此标识符是不透明的,不一定与用户的电子邮件地址或任何其他字段相对应。

使用Firebase服务时,最好使用Firebase身份验证提供的uid。根据官方文档:

  

用户首次登录后,将创建一个新的用户帐户并将其链接到用户登录所用的凭据(即用户名和密码,电话号码或身份验证提供者信息)。这个新帐户存储在Firebase项目中,无论用户如何登录,都可以用来在项目中的每个应用程序中识别用户。