Добрый день, у меня возникла проблема в 28 видео по курсу Networking
А именно: игнорируется (не вызывается) функция saveIntoFirebases()
Я и конечный проект скачал и все до этого видео просмотрел, не знаю как решить данную проблему. Без нее я не могу продвинутся дальше, потому что 29 урок это fetching data from firebase database.
Главное у меня подгружается facebook, срабатывает метод fetchDataFacebook(), я получаю в консоль все свои данные, но затем метод saveIntoFirebases просто не срабатывает.
import UIKit
import FBSDKLoginKit
import FirebaseAuth
import FirebaseDatabase
class LoginViewController: UIViewController {
var userProfile: UserProfile?
lazy var fbLoginButton: UIButton = {
let loginButton = FBSDKLoginButton()
loginButton.frame = CGRect(x: 32, y: 360, width: view.frame.width - 64, height: 50)
loginButton.delegate = self
return loginButton
}()
lazy var customFBLoginButton: UIButton = {
let loginBtn = UIButton()
loginBtn.backgroundColor = UIColor(hexValue: "#3B5999", alpha: 1)
loginBtn.setTitle("Login with Facebook", for: .normal)
loginBtn.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16)
loginBtn.setTitleColor(.white, for: .normal)
loginBtn.frame = CGRect(x: 32, y: 420, width: view.frame.width - 64, height: 50)
loginBtn.layer.cornerRadius = 4
loginBtn.addTarget(self, action: #selector(customFBLogin), for: .touchUpInside)
return loginBtn
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addVerticalGradientLayer(topColor: primaryColor, bottomColor: secondaryColor)
setupViews()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
private func setupViews() {
view.addSubview(fbLoginButton)
view.addSubview(customFBLoginButton)
}
}
// MARK: Facebook SDK
extension LoginViewController: FBSDKLoginButtonDelegate {
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
if error != nil {
print(error)
return
}
guard FBSDKAccessToken.currentAccessTokenIsActive() else { return }
print("Successfully logged in with facebook...")
signIntoFirebase()
}
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
print("Did log out of facebook")
}
@objc private func customFBLogin() {
let loginManager = FBSDKLoginManager()
loginManager.logIn(withReadPermissions: ["email", "public_profile"], from: self) { (result, error) in
if let error = error {
print (error.localizedDescription)
return
}
guard let result = result else { return }
if result.isCancelled { return }
else {
self.signIntoFirebase()
}
}
}
private func signIntoFirebase() {
let accessToken = FBSDKAccessToken.current()
guard let accessTokenString = accessToken?.tokenString else { return }
let credentials = FacebookAuthProvider.credential(withAccessToken: accessTokenString)
Auth.auth().signInAndRetrieveData(with: credentials) { (user, error) in
if let error = error {
print ("Smth is going wrong!", error)
return
}
print ("Success to login in with our user")
self.fetchDataFacebook()
}
}
private func fetchDataFacebook() {
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, email"])?.start(completionHandler: { (_, result, error) in
if let userData = result as? [String : Any] {
self.userProfile = UserProfile(data: userData)
print (userData)
self.saveIntoFirebases()
}
if let error = error {
print(error)
return
}
})
}
private func saveIntoFirebases() {
guard let uid = Auth.auth().currentUser?.uid else { return }
let userData = ["name": userProfile?.name, "email" : userProfile?.email]
let values = [uid : userData]
Database.database().reference().child("bklabla").updateChildValues(values) { (error, _) in
if let error = error {
print (error)
return
}
print ("Success into firebase")
self.openMainVC()
}
}
private func openMainVC() {
dismiss(animated: true)
}
}
После того как я зашел через facebook, у меня не закрывается окно LoginVC, так как функция openMainVC находится в методе saveIntoFirebases, который и не срабатывает.
Вот что выводится в консоли
То есть userData выводится все ок
В Realtime Database в firebase также ничего не записывается (правила на чтение и запись стоят true)