Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何检查Google/Facebook帐户是否已用于在Firebase Auth上创建帐户_Ios_Swift_Facebook_Firebase_Firebase Authentication - Fatal编程技术网

Ios 如何检查Google/Facebook帐户是否已用于在Firebase Auth上创建帐户

Ios 如何检查Google/Facebook帐户是否已用于在Firebase Auth上创建帐户,ios,swift,facebook,firebase,firebase-authentication,Ios,Swift,Facebook,Firebase,Firebase Authentication,我目前正在使用Firebase身份验证注册/登录我的应用程序。 我有Facebook注册/登录和谷歌注册/登录的自定义按钮 例如,Facebook注册/登录按钮的代码是 @objc private func performFacebookLogin(_ sender: UIButton) { let fbLoginManager : LoginManager = LoginManager() fbLoginManager.logIn(permissions: ["

我目前正在使用Firebase身份验证注册/登录我的应用程序。 我有Facebook注册/登录和谷歌注册/登录的自定义按钮

例如,Facebook注册/登录按钮的代码是

@objc private func performFacebookLogin(_ sender: UIButton) {
        let fbLoginManager : LoginManager = LoginManager()
        fbLoginManager.logIn(permissions: ["email"], from: self) { (result, error) -> Void in
            if let error = error {
                print(error)
            } else {
                if result == nil {
                    print("no result!")
                    return
                }
                if AccessToken.current == nil {
                    print("no token")
                    return
                }
                DispatchQueue.main.async {
                    ThirdPartySignupViewController.push(fromVC: self, method: .facebook)
                }
            }
        }
    }
如果用户尚未使用此Facebook帐户在应用程序中创建帐户,则这会将用户带到另一个视图控制器,向其帐户添加其他信息

但是,我找不到任何方法来确定Facebook帐户以前是否用于应用程序中的帐户,在这种情况下,我只想让用户登录并将其带到主屏幕。有办法做到这一点吗

我尝试了
登录(with:)
方法,希望如果应用程序中没有具有此Facebook帐户凭据的帐户,它会返回一个错误,但这不会起作用,因为如果以前没有使用此Facebook帐户创建帐户,这将最终创建一个新帐户

let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
Auth.auth().signIn(with: credential) { (authResult, error) in
   //check if I get an error if the Facebook account has not been used             
}

(编辑)所需流量为1。使用Facebook/Google登录→ 2.输入其他信息→ 3.在Firebase身份验证上创建帐户

使用Firebase进行身份验证时,
Auth
对象通过返回。因此,您可以看到新用户或现有用户的状态

let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString)
    Auth.auth().signIn(with: credential) { (authResult, error) in
        //authResult?.additionalUserInfo?.isNewUser
        if let auth = authResult{
            if auth.additionalUserInfo?.isNewUser {
                // User has not been authenticated before. Do what you need
            } else {
                // User has been authenticated before
            }
        }
    }

我在发布之前也尝试过这一点,但正如我在问题中所说,
.sign(with:)
将在检查用户是否为新用户之前创建一个新帐户。所需流量为1。使用Facebook/Google登录→ 2.输入其他信息→ 3.在Firebase身份验证上创建帐户。您所说的“创建新帐户”是什么意思如果
凭证
相同,firebase不会在
身份验证
中创建新用户。我的意思是在数据库上为我的应用程序创建一个帐户。因此,我基本上使用Facebook和Google登录以及电子邮件/密码,这样在我的应用程序上创建帐户就更容易了(无需输入电子邮件、姓名等),但是,在用户在Facebook/Google登录后出现的视图控制器上输入其他必要信息并按下“创建帐户”之前,不会在我的数据库中创建应用程序的帐户。但是,如果我使用
登录(with:)
,无论用户是否最终在应用程序上创建帐户,都会将用户添加到Firebase身份验证,我认为这是不必要的。我认为最好在用户在数据库上创建帐户后才将用户添加到Firebase身份验证,我想知道是否有办法做到这一点。这种方法目前既不受支持,也没有很好的实践。您需要做的是缓存用户facebook令牌,并在提供所有数据后继续登录和创建帐户。然而,这并不能回答你的问题。您可以让用户登录,如果出现错误,也可以使用ie;找不到帐户,请进入登录。但是,如果用户只是输入了错误的凭据,那么这是一个错误的用户体验。最终,使用你最好的判断,但没有明确的,支持的方法来解决你的问题。还有什么请告诉我。