2016-07-27 79 views
12

我正在使用來自google的firebase,並且我在用戶身份驗證方面遇到了一些問題。在使用Facebook登錄後,我在AuthStateListener中獲取了FirebaseUser,但是如何檢測此用戶是通過Facebook還是以不同方式登錄?如何確定Firebase用戶是否使用Facebook身份驗證登錄

UPDATE 作爲@Frank麪包車Puffelen說FirebaseAuth.getInstance()。getCurrentUser()。getProviderId() 應該返回 「臉譜」,但在我的情況下,它會返回 「火力點」。現在我無法弄清楚這是什麼原因。當我FacebookToken我做這樣的事情:

 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是不是「臉譜」理所應當的。難道我做錯了什麼?我遵循官方谷歌documentation

+0

我相信FirebaseUser.getProviderId()將返回「facebook.com」,但我無法測試它,因爲我的應用程序不使用Facebook。如果可以的話,也許試試吧? –

+0

請看我的更新問題。 – Taldakus

回答

28

在版本3.x和更高版本中,單個用戶可以登錄與多個提供商。因此,不再有單一供應商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

更新中的代碼恰恰是我的答案的前半部分所解釋的。你有沒有在我的第二個片段中使用循環?第一個'UserInfo'的確有提供者ID'firebase'(就像合併用戶一樣)。但是,我的測試中的第二個有'google.com'(我使用Google提供商)。 –

+0

當然你是對的!我犯了一個簡單的錯誤......非常感謝。 – Taldakus

3

在我的應用我使用匿名火力地堡帳戶,當我連接火力權威性與Facebook帳戶或Google帳戶我正在檢查如下,

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"); 
      } 

} 
相關問題