2017-07-18 42 views
0

當用戶使用Facebook登錄到應用程序時,我能夠捕獲並顯示其全名;然而,電子郵件和電話號碼都沒有出現。我已經嘗試了「每個電子郵件地址一個帳戶」以及「每個電子郵件有多個帳戶」。我已使用其電子郵件地址絕對未在Firebase中註冊的帳戶進行測試。我錯過了什麼,以免電子郵件/電話被捕獲?這一切都適用於Google帳戶。Firebase不捕獲來自Facebook的電子郵件/電話

let name = Auth.auth().currentUser?.displayName // works! 
let email = Auth.auth().currentUser?.email   // nil- why? 
let phone = Auth.auth().currentUser?.phoneNumber // nil -why? 

登錄過程,這是標準的火力地堡W/Facebook的,看起來是這樣的:

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) 
{ 
    if let error = error 
    { 
     print(error.localizedDescription) 
    } 
    else 
    { 
     if FBSDKAccessToken.current() != nil 
     { 
      let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString) 
      Auth.auth().signIn(with: credential) { (user, error) in 
       if let error = error 
       { 
        print (error.localizedDescription) 
       } 
      } 
     } 
    } 
} 

更新基於下面的評論。在檢查userInfo的內容時,以下內容也會產生一個零電子郵件和電話。我明白電話可能就是這樣,但似乎電子郵件應該工作。

let userInfo = Auth.auth().currentUser?.providerData 
+0

可能是Facebook用戶不允許訪問電子郵件或電話號碼 –

+0

@ArpitJain我使用我自己的帳戶,它確實允許訪問。 – C6Silver

回答

0

頂級電話號碼currentUser.phoneNumber僅適用於經過Firebase驗證的電話號碼。如果您有該Facebook電話號碼,則可以使用currentUser.updatePhoneNumber API來驗證該號碼(您將需要瀏覽整個流程)。否則,您可以等待即將推出的Admin node.js API在現有用戶上設置具有管理權限的電話號碼:https://github.com/firebase/firebase-admin-node/commit/68563c4b2c8128fbc45fc65bad3f6730d320b539

至於電子郵件,如果是「每個電子郵件有多個帳戶」,則需要自行設置通過currentUser.updateEmail。您可以從currentUser.providerData獲取包含Facebook供應商數據的Facebook電子郵件。

+0

感謝您的回答。關於電子郵件地址,在providerData中是零。其他領域不是像photoURL,但與Facebook的電子郵件仍然爲零(谷歌罰款)。我也不允許每個電子郵件有多個帳戶。 – C6Silver

+0

你可以試用不同的Facebook帳戶嗎?可能是這個帳戶不允許訪問這些字段。我知道你聲稱不然,但測試另一個帳戶只是爲了檢查這個問題是否與該特定帳戶分離並沒有什麼影響。 – bojeil

+0

我用兩個不同的賬戶測試過它。同樣的問題。 – C6Silver