->执行本机FB登录。(就像您现在正在做什么)
->执行Firebase身份验证。
->但此外,请检查FirDatabase中是否存在数据
FBSDKGraphRequest(graPHPath: "/me", parameters: ["fields": "name"]).start { (connection, result, err) in
let accessToken = FBSDKAccessToken.current()
guard let accessTokenString = accessToken?.tokenString else {return}
let credentials = FIRFacebookAuthProvider.credential(withAccessToken: accessTokenString)
FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in
if error != nil {
return
}
self.checkDataExistsinfirDataBaaseForUID(user.uid){
loginStaus in
if(loginStaus){
// logged in
self.performSegue(withIdentifier: "loginToRooms", sender: nil)
}else{
// not logged in
self.performSegue(withIdentifier: "showSetupScreen", sender: nil)
}
}
})
if err != nil {
return
}
}
理想情况下,在设置页面之后,您必须在FirebaseDatabase中的节点用户-> uID下添加设置信息。因此,请检查此方法中是否存在任何此类节点。
func checkDataExistsinfirDataBaaseForUID(_ uid: String, completion: (result: Bool) -> Void) {
let ref = FIRDatabase.database().reference().child("users").child(uid)
ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
completion(snapshot.exists())
})
}
测试用例 :
满足。
在fb登录之后-> firbase身份验证-> Firdatabse节点检查->如果返回true->登录到应用程序
通过使用您的装饰过程, FIRAuth.auth()?.addStateDidchangelistener {}