0

私は小さなプロジェクトに取り組んでおり、Facebook/Google を使用してサインイン/ログインする必要があります。これまでのところ、Google の Firebase Auth と完全に連携しています。

私は基本的にFacebookで作業しているので、すべての機能は問題ありません。

ここで、少し「スタイリング」して、カスタマイズされた外観にしたいと思います。私はそれを実現できないようです。

動き回ったり、形状を変更したり、基本的にすべてを制御したりできる UIButton を作成しました。UIButton をネイティブの Facebook LoginButton とまったく同じにしたいと思います。

私はFacebook自身のドキュメントに行きました。私はすべてを試しました。彼らが書いたコードをコピーして貼り付けたところ、複数のエラーが発生しました。見つけたすべてのチュートリアルを試しましたが、何も役に立ちませんでした。1 つのチュートリアルで少しは理解できましたが、うまくいきませんでした。コピーした Facebook のコード: https://developers.facebook.com/docs/swift/login

事前にどうもありがとう、誰かが私を助けてくれることを願っています。

ここに画像の説明を入力

それが役立つ場合、これが私のコードです:

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")
}


}
4

1 に答える 1

0

私はそれを行う方法を見つけました。推奨されているかどうかはわかりませんが、完全に機能します。

  1. ストーリーボードに UIView を追加し、必要な形状とサイズにします。
  2. UIView に FBSDKLoginButton サブクラスを与えます - 次のように: FBSDKLoginButton クラスを持つ UIView

Swift ファイルで、次のようにします。

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

あなたのviewDidLoadでこれを行います:

viewFBLogin.delegate = self

次に、必要なアクセス許可とそのすべてを決定できます。私は Firebase Documentation に従っているので、次のようになります。

    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")
}

誰かが私と同じ状況にあった場合、それが役立つことを願っています.

于 2016-10-23T08:49:52.850 に答える