2016-07-27 14 views
12

私はGoogleからfirebaseを使用しています。ユーザー認証に問題があります。 facebookでロギングした後、私はAuthStateListenerでFirebaseUserを取得しましたが、このユーザーがFacebook経由でログインしているかどうか、どうやって検出できますか?FirebaseユーザーがFacebook認証を使用してサインインしているかどうかを確認する方法

UPDATE @FrankバンPuffelenは()。GETCURRENTUSER()FirebaseAuth.getInstance言ったように。getProviderId() は "フェイスブック" を返す必要がありますが、私の場合、それは "firebase" を返します。今私はこの動作の理由が何であるかを理解できません。

 AuthCredential credential = FacebookAuthProvider.getCredential(facebookToken.getToken()); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 

         } 

        } 
       }); 

とafterthat onCompleteの()メソッドが呼び出される前に、私のAuthStateListenerは、それがあるべきなプロバイダIDは「フェイスブック」ではありませんユーザーを取得します。私はFacebookTokenを得たとき、私はこのような何かを私は何か間違っているのですか?私は公式googleに従ったdocumentation

+0

をチェックしていたGoogleアカウントは「facebook.com」を返しますが、私のアプリは、Facebookのを使用していないように私はそれをテストすることはできません。もしあなたができるなら、それを試してみてください。 –

+0

更新された質問をご覧ください。 – Taldakus

答えて

28

バージョン3.x以降では、1人のユーザーが複数のプロバイダでサインインすることができます。したがって、単一のプロバイダIDという概念はもはや存在しません。あなたが呼び出す事実:

FirebaseAuth.getInstance().getCurrentUser().getProviderId() 

それは、常にfirebaseを返します。ユーザーがFacebookで締結された場合、あなたはプロバイダのデータを検査する必要があります検出するため

:私のアプリで

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) { 
    if (user.getProviderId().equals("facebook.com")) { 
    System.out.println("User is signed in with Facebook"); 
    } 
} 
+0

残念ながら、私の場合のgetProviderId()は "firebase"を返します。私は私の質問を更新する、あなたが一見することができれば素晴らしいだろう。 – Taldakus

+2

アップデートのコードは、私の答えの最初の半分が正確に説明しているとおりです。あなたは私の2番目のスニペットにあるループを使いましたか?最初の 'UserInfo'は実際にはプロバイダID' firebase'を持っています(これはマージされたユーザのためです)。しかし、私のテストで2番目のものは 'google.com'でした(私はGoogleプロバイダを使いました)。 –

+0

もちろん、あなたは正しいです!私は簡単な間違いをした...たくさんの人に感謝します。 – Taldakus

3

私は匿名Firebaseアカウントを使用して、と私はFacebookのアカウントでfirebase認証接続したときや私はそのFirebaseUser.getProviderId()信じて、次のように

for (UserInfo user: FirebaseAuth.getInstance().getCurrentUser().getProviderData()) { 

      if (user.getProviderId().equals("facebook.com")) { 
       //For linked facebook account 
       Log.d("xx_xx_provider_info", "User is signed in with Facebook"); 


      } else if (user.getProviderId().equals("google.com")) { 
       //For linked Google account 
       Log.d("xx_xx_provider_info", "User is signed in with Google"); 
      } 

} 
関連する問題