2016-08-28 18 views
0

私は新しいアンドロイドの学習者ですので、ドキュメントで見つけることができないものは私にはありません。ここで私のユーザー作成コードですFirebaseの名前、ユーザー名などで新しいユーザーを作成します

mAuth.createUserWithEmailAndPassword(email,password) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        if(task.isSuccessful()){ 
         //Successfully Registered 
         Toast.makeText(RegisterActivity.this, "Registration Successful", Toast.LENGTH_SHORT).show(); 
        }else { 
         //Error occurred during registration 
         Toast.makeText(RegisterActivity.this, "Registration Unsuccessful", Toast.LENGTH_SHORT).show(); 
         try { 
          throw task.getException(); 
         } catch(FirebaseAuthWeakPasswordException e) { 
          editTextPassword.setError(e.getMessage()); 
          editTextPassword.requestFocus(); 
         }catch(FirebaseAuthUserCollisionException | FirebaseAuthInvalidCredentialsException e) { 
          editTextEmail.setError(e.getMessage()); 
          editTextEmail.requestFocus(); 
         } catch(Exception e) { 
          Log.e(RegisterActivity.class.getName(), e.getMessage()); 
         } 
        } 
        progressDialog.dismiss(); 
       } 
      }); 

これは、ユーザーを作成するために2つのパラメータ(電子メールとパスワード)しか必要としません。より多くのフィールドを持つユーザーを作成するには、どのようなアプローチを取るべきですか。

さらに、ユーザーのログインステータスを確認するためにFirebaseAuth.AuthStateListener()を追加しました。しかし、私がfirebaseAuth.getCurrentUser().getDisplayName()を呼び出すと、正常にユーザーがログインした後にnullが返されます。名前を使用してユーザーを作成するにはどうすればfirebaseAuth.getCurrentUser().getDisplayName()で取得できますか。

+0

は、あなたがしようとしたことがあり、 https://firebase.google.com/docs/auth/android/manage- users#update_a_users_profile – srijanshukla

+1

@srijanshuklaドキュメントリンクを提供してくれてありがとう。実際に私は正しいアプローチを知らなかった。 – Sp4Rx

+0

どちらの人がこれら2つの回答の中で良い習慣であるか教えていただけますか? – Sp4Rx

答えて

0

を登録に成功したら、

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
     .setDisplayName("Jane Q. User") 
     .build(); 

編集:profileUpdatesは決してアクセスされないので、このコードは少し不完全です。その後

user.updateProfile(profileUpdates) 
    .addOnCompleteListener(new OnCompleteListener<Void>() { 
     @Override 
     public void onComplete(@NonNull Task<Void> task) { 
      if (task.isSuccessful()) { 
       Log.d(TAG, "User profile updated."); 
      } 
     } 
    }); 

、必要な場所にこれを使用し、それを取得するために、

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // Name, email address etc 
    String name = user.getDisplayName(); 
    String email = user.getEmail(); 
} 
+1

これは私が感謝したいことです。 – Sp4Rx

+0

getDisplayName()に対して常にNULLポインタ例外を与えます。 –

+0

@kshitijjainしかし、すでにチェックしているif条件があります – srijanshukla

2

ユーザー名やその他の必要な情報などの追加情報をユーザーに追加するには、電子メールとパスワードの登録が正常に完了したときに生成された固有のuser_idでFirebaseリアルタイムデータベースを使用してこれらのデータを保存する必要があります。

onComplete方法でユーザーの名前を追加します

String name = mNameField.getText().toString().trim(); 

、登録フォームで

の名のユーザー入力を取得します:

@Override 
public void onComplete(@NonNull Task<AuthResult> task) { 
if(task.isSuccessful()){ 

    String user_id = mAuth.getCurrentUser().getUid; 

    DatabaseReference current_user = mDatabase.child(user_id); 

    current_user.child("name").setValue(name); 

    progressDialog.dismiss(); 

    } 
+0

'' .read ":true、" .write ":true'を設定するのではなく、登録中に' uid'ノードの下で書き込みを行うアクセスを与えるために、ルールルールに対してどのような変更を行うことができます。 私のツリー構造はroot - > users - > uid - > name @ramithdrと仮定しましょう – Sp4Rx

関連する問題