2017-11-15 1 views
1

との匿名のリンクをユーザーの名前を取得していない匿名サインインあります。私のグーグルサインインでは問題はなく、ユーザーの資格情報も名前、電子メール、ファイヤーベースIDなど素晴らしいものになっています。 問題は、firebaseを使用して私の匿名アカウントをGoogleのIDにリンクするときにもうまくいきますが、getDisplayName()が呼び出されたときに、は1つが正常な<strong>Googleはサインイン</strong>およびその他のですが、私は署名イン用の2つの方法の方法を持っている場合、Googleアカウント

注:私はfirebase IDと電子メールを正しく取得していますが、名前はnullになります。

これは、ここに私のログ出力されます:私のコードは正常に動作しているが、まだ運、コードは次のようになりませんので

11-15 12:58:26.712 21983-21983/in.pinelane.myhovi E/userName: null 
11-15 12:58:26.712 21983-21983/in.pinelane.myhovi E/userEmail: [email protected] 

callAnonymousUpdateApiで

private void linkGuestWithCredential(AuthCredential credentials) { 

    firebaseAuth.getCurrentUser().linkWithCredential(credentials) 
      .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        if(task.isSuccessful()){ 
         mProgress.dismiss(); 
         Log.d(TAG, "linkWithCredential:success"); 

         FirebaseUser permanentUser = task.getResult().getUser(); 
         callAnonymousUpdateApi(permanentUser); 

         Intent signIntent = new Intent(LoginActivity.this, MainActivity.class); 
         signIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(signIntent); 
         Toast.makeText(LoginActivity.this, "Welcome to MyHovi!", Toast.LENGTH_LONG) 
           .show(); 
         finish(); 
         overridePendingTransition(R.anim.right_enter, R.anim.left_exit); 

        }else{ 
         mProgress.dismiss(); 
         Log.e(TAG, "linkWithCredential:failure", task.getException()); 
         Toast.makeText(getApplicationContext(), "Sign-in failed", Toast.LENGTH_SHORT) 
           .show(); 
        } 
       } 
      }); 

(permanentUSer)私は実際に資格情報を取得しています:

private void callAnonymousUpdateApi(FirebaseUser permanentUser) { 

    final String name = permanentUser.getDisplayName(); 
    final String email = permanentUser.getEmail(); 
    final String firebaseId = permanentUser.getUid(); 

    RequestParams params = new RequestParams(); 
    params.add("user_id", userId); 
    params.add("name", name); 
    params.add("email", email); 
    params.add("firebase_id", firebaseId); 
    params.add("user_complete", "true"); 
} 

私がこれまでにしようとしていることは次のとおりです。

FirebseUser permanentUSer = task.getResult().getUser();しようとしている私がやったcallAnonymousUpdateApi(FirebaseUser permanentUser)にある別の方法で同じことをしようとしました

  • FirebseUser permanentUSer = FirebaseAuth.getInstance().getCurrentUser();に変更
    1. final String name = FirebaseAuth.getInstance().getCurrentUser().getDisplayName();

    まだ運として名を取得し、任意のヘルプは高く評価されるだろう。ありがとう

    答えて

    1

    プロバイダをリンクするとき、プロバイダのdisplayNameとphotoURLは自動的にトップレベルにコピーされません。匿名ユーザーにリンクするときにこれらのフィールドをコピーするだけで済みます。 GoogleのdisplayNameを取得することができます:

    FirebaseAuth.getInstance().getCurrentUser().getProviderData(‌​).get(0).getDisplayName()

    あなたはなりその後、updateProfile:

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

    あまりにもこの1ではありません運。私が得ているのはすべてヌルです。私はpermanentUser.getProvidersData()で試した。get(0).getDisplayName()。助けていただきありがとうございますが、私は実行可能なものが必要です。 –

    +0

    使用しているGoogleアカウントに表示名がないか、公開されていない可能性があります。他のGoogleのメールでテストを試してみてください。 – bojeil

    +0

    私はGoogle Sign-inメソッドを使用しているので、ここで私の質問に記載されている名前、電子メール、firebaseidなどのデータを取得しています。しかし、それが名前のために働いていないアカウントのリンクになると、私は電子メールとfirebaseidだけを取得し、nullとして名前を付けます –

    関連する問題