如何解决如何在我的iOS应用中检查Google身份验证状态Swift 5
当用户通过Google身份验证时,我想将用户的状态记录在某处。当用户单击某个单元格时,我希望该用户通过身份验证,然后将其发送到另一个视图,如果没有,则将其发送到授权页面。但是我做不到。我创建了一个标志,但是由于某种原因,它仅在重新启动应用程序后才会触发。
...
protocol SourceViewControllerDelegate{
func requestReloadTable()
}
class SourcesViewController: UIViewController,GIDSignInDelegate {
...
var isAuthenticationComplete: GIDAuthentication?
...
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: SourceCell.reuseId,for: indexPath) as! SourceCell
cell.sourceViewControllerDelegate = self
....
return cell
}
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath,animated: true)
if isAuthenticationComplete != nil {
let storyboard = UIStoryboard(name: "GoogleDriveViewController",bundle: nil)
let vc = storyboard.instantiateViewController(identifier: "GoogleDrive") as! GoogleDriveViewController
navigationController?.pushViewController(vc,animated: true)
} else {
GIDSignIn.sharedInstance().signIn()
}
}
...
func sign(_ signIn: GIDSignIn!,didSignInFor user: GIDGoogleUser!,withError error: Error!) {
if let error = error {
print(error.localizedDescription)
return
}
guard let authentication = user.authentication else { return }
isAuthenticationComplete = authentication
}
...
}
extension SourcesViewController: SourceViewControllerDelegate {
func requestReloadTable() {
tableView.reloadData()
}
}
...
class SourceCell: UITableViewCell {
...
var sourceViewControllerDelegate: SourceViewControllerDelegate?
...
@IBAction func logInlogoutButton(_ sender: Any) {
print("Log Out button pressed")
GIDSignIn.sharedInstance().signOut()
sourceViewController?.isAuthenticationComplete = nil
sourceViewControllerDelegate?.requestReloadTable()
}
}
单击此按钮后,我仍然可以转到另一个屏幕,但是如果我重新启动应用程序,那么当我单击此按钮时,将进入授权页面。
解决方法
此
var isAuthenticationComplete: GIDAuthentication?
是实例变量,而不是保存的1,表示对于SourcesViewController
的每个新对象创建,其值为nil,您需要将应用程序状态保存为bool用户默认值,并在每次打开时对其进行检查
保存
guard let authentication = user.authentication else { return }
isAuthenticationComplete = authentication
Userdefaults.standard.set(true,forKey:"userAuthorized")
检查
if Userdefaults.standard.bool(forKey:"userAuthorized") { }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。