2016-06-30 8 views
7

ユーザーを作成するときに、表示名を設定できます。 Androidでこれを行うにはどうすればいいですか?ここでは、達成したい例を示します。ユーザーを作成中にユーザーのFirebase setDisplayName

mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if(task.isSuccessful()){ 
       FirebaseUser.getCurrentUser().setDisplayName(mName); //I want to do this 
      } 
}); 

すべての変数が正しく宣言または初期化されているものとします。

+2

問題を投稿する前に[MCVE](http://stackoverflow.com/help/mcve)を作成することをお勧めします。 – devprashant

+0

@devprashant私はそれを行います –

答えて

15

答えはFirebaseのドキュメントにあります。ここで引用します: "サインインが成功した場合、AuthStateListenerはonAuthStateChangedコールバックを実行します。コールバックでは、getCurrentUserメソッドを使用してユーザーのアカウントデータを取得できます。ここにリンクは次のとおりです。https://firebase.google.com/docs/auth/android/password-auth#sign_in_a_user_with_an_email_address_and_password

あなたは上記のコード(マイナスFirebaseUserライン)を行い、下記に示すように、その後Firebase AuthStateListenerを宣言し、初期化するのであれば、その手段は、ユーザーの表示名を設定し、その後に移動することができます

mAuthListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if(user!=null){ 
      UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
         .setDisplayName(mName).build(); 
      user.updateProfile(profileUpdates); 
      Intent intent = new Intent(currentActivity.this, nextActivity.class); 
      startActivity(intent); 
     } 
    } 
}; 

そしてonResumeでAuthStateListenerを(追加することを忘れないでください)ので、のような:あなたが望む任意の他の活動に同様

@Override 
public void onResume(){ 
    super.onResume(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

、onStop方法でそれを削除することを忘れないでくださいように:

@Override 
public void onStop(){ 
    super.onStop(); 
    if(mAuthListener != null){ 
     mAuth.removeAuthStateListener(mAuthListener); 
    } 
} 

完了!他のアクティビティで使用できるように、ユーザーの表示名を設定します。これは、ユーザーを迎えたり、表示名に関連付けられた他のユーザーデータにアクセスする場合に便利です。

+0

しかし、この場合、2つのネットワークコールが正しいと思いますか?シングルサインアップでそれを組み合わせる方法はありませんか? – Zen

+0

@Zenこのコードは、ユーザーがログインしているかどうかを確認するためのコードです。ユーザーがログインしている場合は、アプリケーションのホーム画面(インテントを使用)に移動して処理できます。または、サインアップ/ログインページ。サインアップ/ログインコードとこのコードは、通常、アプリケーションの設計方法に応じて2つの異なるアクティビティになります。 –

+0

このコードは、onResumeが呼び出されるたびにユーザープロファイルを更新しました。あれは正しいですか ? –

5

また、あなたは次の3行のコード書くことによって、ユーザのFirebase表示名を設定することができます。そうすることによって

FirebaseUser user = mAuth.getCurrentUser(); 

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
        .setDisplayName(mName).build(); 

user.updateProfile(profileUpdates); 

を、あなたの元のコードは次のようになります。

mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if(task.isSuccessful()){ 
       // Sign in success 
       FirebaseUser user = mAuth.getCurrentUser(); 

       UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
        .setDisplayName(mName).build(); 

       user.updateProfile(profileUpdates); 
      } 
}); 

何これは、電子メールとパスワードの認証を使用してユーザーのアカウントが正常に作成されると、ユーザーがサインインすることになります。 この時点で、現在のFirebase Userオブジェクトを取得し、表示名プロパティを任意の文字列に設定できます。

これは、確認メールでユーザーのプロフィール名をテストするのに最適です。

:Firebaseユーザーオブジェクトはユーザーによって更新することができ、基本的な性質、ユニークID、プライマリ電子メールアドレス、名前と写真のURLに保存されたプロジェクトのユーザーデータベースでの固定セットを、持っています。 Firebase Userオブジェクトには他のプロパティを直接追加することはできません。 Firebase Realtime Databaseに追加のプロパティを保存することができます。 (Firebase User Object Properties Doc

+0

この回答は時間のトップに行くでしょう。ありがとう、ちょうど必要に応じて働いた –

関連する問題