2017-03-07 51 views
0

我試圖在我的應用中添加取消提供商功能。我想添加一個按鈕,將用戶的Facebook帳戶從其Firebase用戶帳戶中取消關聯。 Firebase文檔說使用providerData數組,但我不知道如何從中提取Facebook提供者ID。如果我只使用let providerID = self.currentUser.providerID,它只是默認爲數組中的第一個提供者,而不管類型是什麼(Facebook,Twitter,Firebase等)。從Firebase獲取提供商數據用戶

如何從providerData中提取Facebook提供者ID?這是我試圖得到它,但它的誤差(「不能與索引類型爲String的下標類型的值[字符串]」):

guard let providerData = self.currentUser?.providerData else {return} 
     var providerArray: [String] = [] 
     for provider in providerData{ 
      providerArray.append(provider as! String) 
     } 
     var providerID: String = providerArray["Facebook"] 
     FIRAuth.auth()?.currentUser?.unlink(fromProvider: providerID) { (user, error) in 

編輯:

使用

固定
FIRAuth.auth()?.currentUser?.unlink(fromProvider: "facebook.com") { (user, error) in 

回答

0

您正在嘗試像訪問Dictionary一樣訪問providerArray,這不起作用。你正在尋找的是專門針對Facebook的providerId。爲了檢索這個,你需要獲得Facebook的FIRAuthCredential。爲了做到這一點,你應該使用FIRFacebookAuthProvider。這將爲您提供證書,您可以從憑證中提取providerId,將其與當前用戶的providerIds數組匹配,就像您正在執行的操作一樣。然後按照您嘗試的方式取消鏈接。

+0

感謝您的回覆!我實際上是通過傳遞「facebook.com」作爲providerID來解決這個問題的。我只顯示取消鏈接按鈕,如果Facebook身份驗證令牌存在 – winston

+0

這很好。我只是可能不會使用這樣的字符串,考慮如果他們在API中更改該值,那麼您的代碼將無法工作:/只是一個建議! – jnewkirk

+0

這是一個好點!我如何去比較兩者? – winston

0

我解決了這個問題,只有在Facebook身份驗證令牌存在的情況下才顯示取消鏈接按鈕。然後,當按下按鈕時,只需通過「facebook.com」作爲提供者ID:

FIRAuth.auth()?.currentUser?.unlink(fromProvider: "facebook.com") { (user, error) in 
相關問題