2017-05-08 6 views
10

アンドロイドアプリの再インストールでFacebookにサインインしようとしています。当初、私はGoogleを使って登録し、それをfirebaseとうまくリンクさせました。アカウントが既にFirebase Androidの初期登録時にGoogleとリンクしている場合は、Facebookにログインしてください

しかし、私はFacebookのをどうしようとしたとき、それはあなたがそう

FirebaseUser prevUser = currentUser; 
currentUser = auth.signInWithCredential(credential).await().getUser(); 
// Merge prevUser and currentUser accounts and data 
// ... 

が、ここawait()方法はもはや存在しないことによってでき、私はFirebase Documentationに読ん

FirebaseAuthUserCollisionException 

を与えます。また、ビットを検索した後、私は、このソリューション

Tasks.await(mAuth.signInWithCredential(credential)).getUser(); 

を見つけた。しかし、すでにリンクされている現在のユーザーを取得するときに、これはまた、エラーが発生します。これを解決するために私は何ができますか?

+3

私はこれを答えとして投稿しませんので、Firebaseコンソールで、[認証]> [ログイン方法]の下の[詳細]の下に、設定する場所があることがわかります複数のアカウントを同じアドレスに割り当てることができます。リンクしたドキュメントには、まず認証フローを使用してサインインする必要があるため、マージする前に同じ電子メールで複数のアカウントを作成する必要があります。 https://support.google.com/firebase/answer/6400716?hl=ja –

+0

Jen Personが正しく – faruk

+0

アカウントをマージする方法@faruk – Shubham

答えて

0

firebaseユーザーを取得する方法はありません。.await()
代わりにFirebaseAuth.AuthStateListenerを使用してください。

ですから、このようなものでfirebase看板を実装:

FirebaseAuth.getInstance()signInWithCredential(credential) 
       .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 

         if (task.isSuccessful()) { 
          Log.d(TAG, "login success"); 
         } else { 
          Log.d(TAG, "login error"); 
         } 

        } 
       }); 

とユーザーの状態が変更されるたびにtrigerredされAuthStateListenerを実装:

private FirebaseAuth.AuthStateListener authStateListener; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     initAuthStateListener(); 

    } 

private void initAuthStateListener() { 

     authStateListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user == null) { 
        //user is not logged in 
       } else { 
        //user is logged in 
       //logic to finish the activity and proceed to the app can be put here 
       } 
      } 
     }; 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     FirebaseAuth.getInstance().addAuthStateListener(authStateListener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     FirebaseAuth.getInstance().removeAuthStateListener(authStateListener); 
    } 

注:onAuthStateChangedが一度ときtrigerredさをauthStateListener firebase authインスタンスに追加されます。

また、Prevent creation of multiple accounts with the same email addressパラメータがfirebase console(認証>>サインイン方法>>詳細>>電子メールアドレスごとに1つのアカウント(変更))に設定されていることを確認してください。

+0

これは、ユーザーが既にGoogleプラスで登録している場合に役立ちませんid..itはFirebaseAuthUserCollisionExceptionを返します。次に、ドキュメントにawaits()を使用するように指定されている両方のアカウントをマージする必要があります。しかし、私は正常にそれを使用することができません – Shubham

+0

あなたはグーグルでサインインし、同じ電子メールでFacebookにサインインすると、firebaseはそれらのアカウントをデフォルトでリンクします(私の答えの一番下に記載されている設定があなたのプロジェクトのfirebaseコンソール) – dzikovskyy

+0

デフォルトではリンクが行われていません – Shubham

関連する問題