IOS Firebase - после выхода я не могу войти - PullRequest
0 голосов
/ 11 апреля 2020

Я использую вход в Google через Firebase (IOS / Swift), и в целом все работает, за исключением того момента, когда я вышел из аккаунта Google и не могу войти ... Я не даже получить сообщение об ошибке, как будто функция входа не выполняется. Это происходило целую вечность, и вдруг я мог снова войти в систему, поэтому я попытался выйти, и теперь я не могу войти.

Я заметил, что Firebase изменил документацию, это что-то что с этим делать? Я тоже это пробовал, но тоже не получилось.

Документы Firebase: https://firebase.google.com/docs/auth/ios/google-signin

Любая помощь приветствуется!

Вот реализация входа в Google в моем делегате приложения -

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        FirebaseApp.configure()
        GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
        GIDSignIn.sharedInstance().delegate = self

        return true
    }

И

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
          if let error = error {
            print("Something went wrong \(error.localizedDescription)")
            return
          }

          guard let authentication = user.authentication else { return }
          let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                            accessToken: authentication.accessToken)

            Auth.auth().signIn(with: credential) { (authResult, error) in
              if let error = error {
                print(error.localizedDescription)
                return
              }
              // User is signed in
            print("App delegate signed in ")
            }
        }

Мой контроллер просмотра, который входит в систему пользователя, реализует вход в Google. Я расширяю контроллер представления с помощью GIDSignInDelegate, как это -

@IBAction func googleSignInTapped(_ sender: Any) {
      //performSegue(withIdentifier: "homeFromGSignIn", sender: self)
      GIDSignIn.sharedInstance().signIn()

    }
}

и - я вызываю делегат GIDSignin и представляющий контроллер, а также проверяю, вошел ли пользователь в систему в данный момент ... так что я могу войти в систему пользователей автоматически при загрузке приложения.

override func viewDidLoad() {
    super.viewDidLoad()

   setUpElements()
   GIDSignIn.sharedInstance().delegate = self
   GIDSignIn.sharedInstance()?.presentingViewController = self

    Auth.auth().addStateDidChangeListener { (auth, user) in
      if user == nil {
        // prompt user to sign in
        print("No user here ")
      } else {
        self.performSegue(withIdentifier: "LoginToHome", sender: self)
      }
    }

}

и

extension ViewController: GIDSignInDelegate {


    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
      // ...
      if let error = error {
        print("Something went wrong \(error.localizedDescription)")
        return
      }

        let db = Firestore.firestore()
          guard let firstName = user.profile.givenName else { return }
          guard let secondName = user.profile.familyName else { return }
          guard let userUID = Auth.auth().currentUser?.uid else { return }

      guard let authentication = user.authentication else { return }
      let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)

        Auth.auth().signIn(with: credential) { (authResult, error) in
          if let error = error {
            print(error.localizedDescription)
            return
          }
            db.collection("users").document(userUID).setData(["firstName": firstName, "lastName": secondName, "uid": userUID]) { (error) in
                       if error != nil {
                           print("User data couldn't save ")
                       }}
                        self.performSegue(withIdentifier: "LoginToHome", sender: self)//
                        print("changed segue from view controller ")
                        print("signed in ")
        }
    }

}

и, наконец, мои настройки для моего контроллера представления, который регистрирует пользователей, выглядят так -

    @IBAction func signOutButtonTapped(_ sender: Any) {

            let firebaseAuth = Auth.auth()
        do {
          try firebaseAuth.signOut()
            GIDSignIn.sharedInstance().signOut()
            performSegue(withIdentifier: "SettingsToLogin", sender: nil)
            print("Signed out")
        } catch let signOutError as NSError {
          print ("Error signing out: %@", signOutError)
        }

    }

}

Большое спасибо!

...