Как сделать так, чтобы пользователь вошел в систему с помощью входа в Google? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь держать пользователя вошедшим в систему после выхода из приложения.Когда пользователь нажимает кнопку «Домой», а затем возвращается снова, он сохраняет их в системе (и загружает данные из API Google Classroom, который я использую).Но когда пользователь принудительно закрывает приложение, оно не будет.Я хотел бы, чтобы пользователь оставался в системе после принудительного закрытия приложения (как при нажатии кнопки «Домой»).Есть ли способ сделать это?Я использую Google Signin & Firebase для входа в систему.

Здесь я вхожу в систему:

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    // ...
    if let error = error {
        // ...
        return
    }

    print("User Signed into Google")

    guard let authentication = user.authentication else { return }

    // Set the OAuth authorizer for the Classroom API
    service.authorizer = authentication.fetcherAuthorizer()

    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                   accessToken: authentication.accessToken)
    // ...
    Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in
        if let error = error {
            // ...
            return
        }
        // User is signed in
        print("User is Signed into Firebase using Google Sign In")

        //let welcomeScreen = WelcomeScreenViewController()

        //welcomeScreen.performSegueToHomeworkScreen()
        if Auth.auth().currentUser != nil {
            let navigationController = self.window?.rootViewController as! UINavigationController
            for controller in navigationController.viewControllers {
                if let LoginViewController = controller as? LogInViewContoller {
                    LoginViewController.performSegue(withIdentifier: "logInToHome", sender: nil)
                    break
                }
            }

        }
    }
}

А когда пользователь открывает приложение:

func applicationWillEnterForeground(_ application: UIApplication) {
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    GIDSignIn.sharedInstance().signInSilently()

}

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

1 Ответ

1 голос
/ 01 апреля 2019

Текущий пользователь Firebase остается в системе даже после принудительного выхода из приложения.Поскольку код вызывает GIDSignIn.sharedInstance().signInSilently(), это будет означать, что пользователь будет зарегистрирован в его учетной записи Google, но он не будет автоматически регистрироваться в Firebase.Вместо этого добавьте прослушиватель изменения состояния .

handle = Auth.auth().addStateDidChangeListener { (auth, user) in
  if user == nil {
    // prompt user to sign in
  } else {
    // you know the current user
  }
}

Это закрытие функции будет запускаться каждый раз, когда вносится изменение в аутентификацию, поэтому, если пользователь затем выходит из системы, этобудет запущен снова, и вы увидите, что пользователь больше не вошел в систему и может обработать его соответствующим образом.Когда пользователь входит в систему, закрытие снова запускается, и вы можете делать с ним все, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...