0

私は少しのプロジェクトに取り組んでおり、Facebook/Googleを使ってログイン/ログインする人が必要です。 GoogleのFirebase Authとこれまで完全に連携してきました。FacebookログインのためのカスタムUIButton

私は基本的にFacebookで働くので、すべての機能は大丈夫です。

私はこれを少し「スタイル」し、カスタマイズした外観を与えたいと思います。私はそれが起こるように見えることはできません。

私はUIButtonを作っています。私は動き回り、形を変えて、基本的にすべてをコントロールできます。 UIButtonをという正確なのネイティブFacebook LoginButtonと同じようにしたいと思います。

私はFacebook独自のドキュメントに行きました。私はすべてを試みた。彼らが書いたコードをコピー/貼り付け、複数のエラーを出します。私は見つけることができるすべてのチュートリアルを試みたが、何も助けなかった。 1つのチュートリアルでは私にはちょっとしたことがありましたが、それほど効果がありませんでした。 コピーした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

を今すぐあなたの迅速なファイルで、次のように実行します。

viewFBLogin.delegate = self 

:あなたのviewDidLoadで

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

は、これを行いますそして、あなたが望むパーミッションとそのすべてを決定することができます。私は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") 
} 

誰かが私と同じ状況にあったなら、助けてくれることを望みます。

関連する問題