我已经使用Facebook,Google和Google为我的iOS应用设置了Firebase身份验证电子邮件/密码登录,一切正常。此身份验证仅在用户想要访问我的应用程序的高优先级部分时发生(即我不需要用户登录才能开始使用该应用程序)。
在应用启动时,我会在后台匿名签署用户,而且工作正常。
我已阅读documentation,但我很难理解使我能够将匿名帐户链接到以下流程中的帐户登录的Facebook /电子邮件所需的代码:
我的方法目前看起来像这样:
func signupWithFacebook(){
// track the anonymous user to link later
let prevUser = FIRAuth.auth()?.currentUser
FBSDKLoginManager().logInWithReadPermissions(["public_profile", "email"], fromViewController: self) { (result, error) in
if let token = result?.token?.tokenString {
let credential = FIRFacebookAuthProvider.credentialWithAccessToken(token)
FIRAuth.auth()?.signInWithCredential(credential, completion: { (user, error) in
if user != nil && error == nil {
// Success
self.success?(user: user!)
dispatch_async(dispatch_get_main_queue(), {
self.dismissViewControllerAnimated(true, completion: nil)
})
}
})
}
}
}
任何消除混淆的指针都会很棒。
更新 我已经意识到我对应用程序逻辑感到困惑,因为用户是在测试期间创建的。而不是为上述场景创建2个单独的用户(一个通过Facebook和另一个匿名验证),所有发生的事情是原始的匿名user.uid“A”与某些Facebook身份验证凭据“链接”。在Firebase控制台中,匿名uid将从匿名更改为旁边的Facebook徽标。
这就是我的工作方法:
func signupWithFacebook(){
FBSDKLoginManager().logInWithReadPermissions(["public_profile", "email"], fromViewController: self) { (result, error) in
if let token = result?.token?.tokenString {
let credential = FIRFacebookAuthProvider.credentialWithAccessToken(token)
FIRAuth.auth()?.currentUser!.linkWithCredential(credential) { (user, error) in
if user != nil && error == nil {
// Success
self.success?(user: user!)
dispatch_async(dispatch_get_main_queue(), {
self.dismissViewControllerAnimated(true, completion: nil)
})
} else {
print("linkWithCredential error:", error)
}
}
}
}
}
答案 0 :(得分:4)
因此,您的代码遵循this链接中的前两个步骤。但文档明确指出不要打{{1}}而是打电话
ui:repeat
从Facebook的SDK中获取凭证后。
来自链接的引用:signInWithCredential