(iOS + Facebook Auth) Невозможно сгенерировать UID и сохранить данные пользователя в Firebase - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть проект iOS, который аутентифицирует пользователя из Google, Email или Facebook.После аутентификации пользователя firebase автоматически добавляет пользователя в список пользователей аутентификации на консоли Firebase.Я также сохраняю данные пользователя (электронная почта, UID) в моей базе данных в реальном времени в разделе root / User.

Моя учетная запись Facebook работает, но она не затрагивает мой проект Firebase (то есть: не отображается в консоли для аутентифицированного пользователя и т. Д.).Мне нужно, чтобы пользователь появился там, чтобы я мог использовать UID для связи данных и т. Д.

Вот мой AppDelegate.swift

import UIKit
import Firebase
import GoogleSignIn
import FBSDKLoginKit
import FacebookCore

var fbAccessToken: AccessToken?


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        // Use Firebase library to configure APIs
        FirebaseApp.configure()

        // Facebook
        FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)




        // Added from Firebase docs -- Google
        GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
        GIDSignIn.sharedInstance().delegate = self

//        if currentUser != nil {
//            self.window?.rootViewController?.performSegue(withIdentifier: "loginPush", sender: nil)
//        }

        return true
    }

    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
        // FB Auth
        let handled: Bool = SDKApplicationDelegate.shared.application(application, open: url,  options: options)

        if !handled{
        // Google Auth
            print("clicked google sign in")
            return GIDSignIn.sharedInstance().handle(url,
                                                     sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                     annotation: [:])
        }
        return true
    }

    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
        if let error = error{
            print(error.localizedDescription)
            return
        } else {
            guard let authentication = user.authentication else { return }
            let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
                                                           accessToken: authentication.accessToken)
            Auth.auth().signInAndRetrieveData(with: credential) { (result, error) in
                if error == nil{
                    print(result?.user.email)
                    self.window?.rootViewController?.performSegue(withIdentifier: "loginPush", sender: nil)

                    self.checkUser()
                } else {
                    print(error?.localizedDescription)
                }
            }
        }
    }

    func checkUser(){
        guard let uid = Auth.auth().currentUser?.uid else {return}
        Database.database().reference().child("User/\(uid)").observeSingleEvent(of: .value) { (snapshot) in
            if snapshot.exists(){
                print("User exists")
            } else {
                print("Path doesn't exist")
                // Add the user to the database
                let userData = [
                    uid: Auth.auth().currentUser?.email!
                    ] as [String : Any]
                Database.database().reference().child("User/\(uid)").setValue(userData)
            }
        }
    }

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

    func applicationWillResignActive(_ application: UIApplication) {
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        FBSDKAppEvents.activateApp()
    }

    func applicationWillTerminate(_ application: UIApplication) {
    }
}

На моем * 1009 нет кода* что напрямую влияет на авторизацию Facebook, когда я пытался добавить @IBAction func для сохранения UID и т. д. из Facebook, кнопка не будет работать должным образом (т. е. после нажатия она вернется в исходное состояние)

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