0

Я работаю над небольшим проектом, и мне нужны люди, чтобы войти/войти в систему, используя Facebook/Google. Он отлично работает до сих пор с Firebase Auth от Google.Пользовательский UIButton для Facebook Войти

Я в основном работает с Facebook, поэтому все функциональные возможности в порядке.

Теперь я хотел бы немного «подгонять» его и придавать ему индивидуальный вид. Кажется, я не могу этого сделать.

Я создал UIButton, чтобы передвигаться, изменять форму и в основном контролировать все. Я бы хотел, чтобы мой UIButton сделал точный так же, как и родной Facebook LoginButton.

Я пошел в собственную документацию Facebook. Я все пробовал. Я копирую/вставляю код, который они написали, он дает несколько ошибок. Я пробовал каждый учебник, который мог найти, ничего не помогло. Один учебник дал мне немного пути, но не совсем понял. Код Facebook, который я скопировал: https://developers.facebook.com/docs/swift/login

Большое спасибо, я надеюсь, что кто-то может мне помочь.

enter image description here

Вот мой код, если это помогает:

import UIKit 
import FacebookLogin 
import FacebookCore 
import FBSDKLoginKit 
import FBSDKCoreKit 
import FirebaseAuth 

class ViewController: UIViewController, FBSDKLoginButtonDelegate { 

let loginButton: FBSDKLoginButton = FBSDKLoginButton() 

@IBOutlet weak var SpinnerLogin: UIActivityIndicatorView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    loginButton.isHidden = true 

    FIRAuth.auth()?.addStateDidChangeListener { auth, user in 
     if let user = user { 
      // User is signed in. 

      let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
      let homeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeView") 

      self.present(homeViewController, animated: true, completion: nil) 


     } else { 
      // No user is signed in. 

      self.loginButton.readPermissions = ["public_profile", "email", "user_friends" ] 
      self.loginButton.center = self.view.center 
      self.loginButton.delegate = self 
      self.view.addSubview(self.loginButton) 


      self.loginButton.isHidden = false 


     } 
    } 

} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

//Tells us if person is logged in 
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 

    self.loginButton.isHidden = true 

    if (error != nil) { 
     //Handle error 
     self.loginButton.isHidden = false 
    } 

    else if (result.isCancelled) { 
     //Handle cancel event 
     self.loginButton.isHidden = false 

    } 

    else { 

    SpinnerLogin.startAnimating() 

    let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString) 

    FIRAuth.auth()?.signIn(with: credential) { (user, error) in 

     print("User Logged in to Facebook") 
     print("You are now signed in to Firebase") 
    } 
    } 
} 

//Tells us if person logged out 
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { 

    print("User did log out") 
} 


} 

ответ

0

Я нашел способ сделать это. Я не сейчас, если его рекомендуют, но он отлично работает.

  1. Добавить UIView в свою раскадровку и придать ей форму и размер, который вам нужен .
  2. Дайте UIView в FBSDKLoginButton подкласс - как это: UIView with FBSDKLoginButton Class

Теперь в вашем стремительной файл, сделайте так:

@IBOutlet weak var viewFBLogin: FBSDKLoginButton! = FBSDKLoginButton() 

В вашем viewDidLoad это сделать:

viewFBLogin.delegate = self 

И затем вы можете решить, какое разрешение вы хотите, и все это, я следил за документацией Firebase, так вот как он выглядит для меня:

override func viewDidLoad() { 
    super.viewDidLoad() 

    //THIS LINE IS SUPER IMPORTANT, OTHERWISE THE REST OF THE CODE WONT KNOW IF USER IS LOGGED IN OR OUT 
    viewFBLogin.delegate = self 

    viewFBLogin.layer.cornerRadius = 20 

    FIRAuth.auth()?.addStateDidChangeListener { auth, user in 
     if let user = user { 
      // User is signed in. 

      let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
      let homeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeView") 

      self.present(homeViewController, animated: true, completion: nil) 


     } else { 
      // No user is signed in. 

      self.viewFBLogin.readPermissions = ["public_profile", "email", "user_friends" ] 
      self.viewFBLogin.isHidden = false 


     } 
    } 

} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

//Tells us if person is logged in - DOES NOT WORK WITHOUT DELEGATE UP TOP 
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 

    self.viewFBLogin.isHidden = true 

    if (error != nil) { 
     //Handle error 
     self.viewFBLogin.isHidden = false 
    } 

    else if (result.isCancelled) { 
     //Handle cancel event 
     self.viewFBLogin.isHidden = false 

    } 

    else { 

    SpinnerLogin.startAnimating() 

    let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString) 

    FIRAuth.auth()?.signIn(with: credential) { (user, error) in 

     print("User Logged in to Facebook") 
     print("You are now signed in to Firebase") 
    } 
    } 
} 

//Tells us if person logged out - DOES NOT WORK WITHOUT DELEGATE UP TOP 
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { 

    print("User did log out") 
} 

Надеюсь, что это поможет, если кто-то был в той же ситуации, что и я.

Смежные вопросы