Проблема с входом в Google при аутентификации через fire-base - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь использовать вход в Google в соответствии с инструкциями, приведенными в аутентификации firebase для swift iOS

https://firebase.google.com/docs/auth/ios/google-signin

Но следуя всем Инструкция по-прежнему не может выполнить вход в Google. Когда кнопка входа в Google нажата, она переходит на страницу аутентификации Google, где я выбираю идентификатор / тип gmail и вход в идентификатор gmail, но после этого он не регистрируется с идентификатором gmail в firebase.

Ниже приведен код, который я использую

AppDelegate.swift

 internal func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()

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

        let authListener = Auth.auth().addStateDidChangeListener { auth, user in
        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        if user != nil {
                //
          let pushManager = PushNotificationManager(userID: Auth.auth().currentUser!.uid)
          pushManager.registerForPushNotifications()
         } else {
             // menu screen
           }
        }
       return true
    }


    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any])
      -> Bool {
      return GIDSignIn.sharedInstance().handle(url)
    }

    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        return GIDSignIn.sharedInstance().handle(url)
    }

    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)
      // ...
    }

ViewController.Swift

override func viewDidLoad() {
        super.viewDidLoad()
        GIDSignIn.sharedInstance()?.presentingViewController = self
        GIDSignIn.sharedInstance().signIn()
   }

Я реализовал GIDSignInDelegate в AppDelegate, Включил Google Войти в Аутентификацию Firebase. Созданная кнопка на раскадровке согласно инструкциям в ссылке выше. Я также настроил обратный идентификатор клиента. Все еще не могу войти / зарегистрироваться.

Пожалуйста, помогите. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Я думаю, что в методе делегата вам нужно вызвать Auth fun 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
            // ...
        }
    }
0 голосов
/ 26 февраля 2020

Вы почти закончили. Вы просто не связали учетные данные, полученные при входе в Google, с Firebase Auth. Поэтому, когда у вас есть Credential, вы можете вызвать этот блок кода:

if let unwrappedCredential = credential {
    Auth.auth().signIn(with: unwrappedCredential) { (result, error) in
           //Do something with the result or error
    }
}
...