2017-03-07 54 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 
相关问题