Firebase IOS Google Войти: Изменить вид после успешного входа в систему - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь создать свое первое IOS приложение и пытаюсь реализовать вход в Firebase Google, следуя документации, расположенной здесь: https://firebase.google.com/docs/auth/ios/google-signin. Проблема пытается изменить представления, если пользователь успешно вошел в систему. Я пробовал несколько решений относительно этой проблемы из других сообщений переполнения стека, но ни один из них не работал. Я полагаю, что это из-за нового файла sceneDelegate, который другие решения не должны принимать во внимание, поскольку они используют предыдущие версии XCode.

Вход в Google реализован в делегате приложения, а указанный c код, который фактически пытается аутентифицировать пользователя (в делегате приложения), находится здесь:

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
  // ...
  if let error = error {
    // ...
    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 {
    // ...
    return
  }
  // User is signed in
  // Here i want to change views
}

}

Один раз пользователь вошел в систему, как я могу изменить представления? Я перепробовал все, что смог найти, и все, похоже, не работает или не работает sh приложение.

Любая помощь очень ценится

Ответы [ 3 ]

0 голосов
/ 09 марта 2020

Вы можете использовать это в своей функции входа в AppDelegate:

let nextVC= UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourViewController") as! YourViewController
window?.rootViewController = nextVC
0 голосов
/ 11 марта 2020

Вот пример, как вы можете сделать это в вашем LoginVC:

class LoginViewController: UIViewController {

  override func viewDidLoad() {

    super.viewDidLoad()

    GIDSignIn.sharedInstance().delegate = self

    GIDSignIn.sharedInstance()?.presentingViewController = self

  }
}

Это то, что я добавил в методе viewDidLoad. После этого я создал пользовательскую кнопку, которая наследует UIButton. Я создал эту кнопку программно, но вы можете просто использовать @IBOutlet weak var googleB: UIButton!. Затем, на нажатие этой кнопки, вы можете добавить это:

@IBAction func googleBTap(_ sender: UIButton) {

    GIDSignIn.sharedInstance().signIn()
}

Затем я создал extension для GIDSignInDelegate.

extension LoginViewController: GIDSignInDelegate {

 func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {

    if let error = error {

        print(error)

        return
    }

    guard let email = user.profile.email 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)
      return
    }

    //If login is successful then add
   self.navigationController.pushViewController(nextVC(), animated: true) 
   //OR
   self.performSegue() //<-- Whatever goes in here, I don't use these methods as I create views programitacally, but you can use it here and move to next view 
}

 }

}

Ну, это один из способов , но когда ваше приложение становится больше, лучше создать класс FirebaseHelper, и вы будете использовать множество общих методов, таких как fetchProviders, signIn для Google, Facebook, Apple sign- дюймы Таким образом, вы можете написать одну функцию, которая может получить учетные данные и войти в систему пользователя, которая затем будет оптимизирована.

0 голосов
/ 09 марта 2020

Сначала вы устанавливаете свой переход от LoginViewController до HomeViewController и устанавливаете идентификатор для вашего перехода на loginToHome.

            if error == nil {
                print("User signed in")
                self.performSegue(withIdentifier: "loginToHome", sender: self)
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...