У меня есть проект 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, кнопка не будет работать должным образом (т. е. после нажатия она вернется в исходное состояние)