UIButton 点击,Alamofire POST 调用,不执行 Segue 并成功登录 Firebase
Posted
技术标签:
【中文标题】UIButton 点击,Alamofire POST 调用,不执行 Segue 并成功登录 Firebase【英文标题】:UIButton click, Alamofire POST call, doesnt performSegue with a successful Firebase Login 【发布时间】:2021-04-15 14:28:54 【问题描述】:我有一个简单的按钮操作
在进入此之前,我会验证电子邮件和密码,但这是我的 Firebase 代码。当您单击按钮时,它将进入VerifyUserInformation
函数,并且响应将吐出。基本上,VerifyUserInformation
中的 segue 不会为我运行,dismiss 功能也不会关闭模态(呈现全屏)。
有什么办法可以解决这个问题?
Auth.auth().signIn(withEmail: emailOutlet.text!, password: passwordOutlet.text!) [weak self] user, error in
guard let strongSelf = self else return
if let error = error
self!.displaySnackbar(messageString: "\(error.localizedDescription)")
return
self!.preferences.setValue(true, forKey:SHARED_PREF_USER_LOGGED_IN_KEY)
var firstTimeUser = self!.preferences.bool(forKey:FIRST_TIME_USER)
print("\(self!.TAG) FirstTimeUser: \(firstTimeUser)")
if (firstTimeUser)
print("\(self!.TAG) This is the first time the user is using the application.")
self?.VerifyUserInformation(firebaseId: "\(Auth.auth().currentUser!.uid)")
else
print("\(self!.TAG) User can head into the Application.")
self!.performSegue(withIdentifier: "MainScreen", sender: nil)
self?.progressBar.isHidden = true
self!.loginButtonOutlet.isHidden = false
为了验证用户,我运行了这个函数。
func VerifyUserInformation(firebaseId: String)
let urlString = ADD_USER_FOR_ACCOUNT
let param = [
FROM_APP: "true",
USER_FIREBASE_ID: firebaseId,
GET_USER_ACCOUNT_INFORMATION: "true"
] as [String : Any]
AF.request(urlString, method: .post, parameters: param ,encoding: URLEncoding.default).responseJSON
response in
switch response.result
case .success:
print("\(self.TAG)\n***Response***\n\(response)\n***END***")
if let result = response.value
let JSON = result as! NSDictionary
let errorResponse = JSON["error"] as! Int
if (errorResponse == 1)
print("\(self.TAG) Error verifying the user.")
self.displaySnackbar(messageString: "Error verifying user. Try again.")
else
print("\(self.TAG) User is verified")
let messageResponse = JSON["message"] as! String
if (messageResponse == "user has items")
print("\(self.TAG) User has items, go into MainScreen")
DispatchQueue.main.async
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0)
self.performSegue(withIdentifier: "MainScreen", sender: nil)
self.dismiss(animated: false, completion: nil)
self.preferences.setValue(false, forKey:FIRST_TIME_USER)
self.loginButtonOutlet.isHidden = false
self.progressBar.isHidden = true
else
print("\(self.TAG) User has 0 items, go into Second Onboarding")
DispatchQueue.main.async
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0)
self.performSegue(withIdentifier: "SecondOnBoarding", sender: nil)
self.dismiss(animated: false, completion: nil)
self.loginButtonOutlet.isHidden = false
self.progressBar.isHidden = true
break
case .failure(let error):
self.loginButtonOutlet.isHidden = false
self.progressBar.isHidden = true
self.displaySnackbar(messageString: "Error getting user information. Try again.")
print("\(self.TAG) \(error)")
【问题讨论】:
您能否发布您的AF
请求的printDebug(result)
的结果?
【参考方案1】:
删除dismiss()
后,它开始工作了。
【讨论】:
以上是关于UIButton 点击,Alamofire POST 调用,不执行 Segue 并成功登录 Firebase的主要内容,如果未能解决你的问题,请参考以下文章
Swift 项目:ReactiveSwift+MVVM+RealmSwift+Alamofire+OM