В чем разница между acct.getId () и mFirebaseUser.getUid ()? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь сохранить пользовательские данные в базе данных Firebase в реальном времени, и я использовал авторизацию в Google. Поэтому при создании дерева узлов пользователей я хочу хранить такие данные, как «Пользователи»> «uid»> userdata. Как получить Uid аутентифицированного пользователя? by 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 голосов
/ 25 апреля 2019

GoogleSignInAccount's getId () :

Возвращает уникальный идентификатор для учетной записи Google, если вы создали свою конфигурацию, начиная с `new GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN) или с настроенным requestId (); иначе ноль.

Это предпочтительный уникальный ключ для записи пользователя.

Пока FirebaseUser getUid () :

Возвращает строку, используемую для уникальной идентификации вашего пользователя в базе данных пользователей вашего проекта Firebase. Используйте его при хранении информации в базе данных или хранилище Firebase или даже в своем собственном бэкэнде.

Этот идентификатор непрозрачен и не обязательно соответствует адресу электронной почты пользователя или любому другому полю.

При использовании сервисов Firebase лучше всего использовать uid, полученный из аутентификации Firebase. Из официальной документации:

После первого входа в систему создается новая учетная запись пользователя, которая связывается с учетными данными, т. Е. С именем пользователя и паролем, номером телефона или информацией о поставщике аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от того, как пользователь входит в систему.

...