0

나는 작은 프로젝트를 진행하고 있으며 Facebook/Google을 사용하여 로그인/로그인해야합니다. Google의 Firebase Auth와 함께 지금까지 완벽하게 작동했습니다.페이스 북의 사용자 정의 UIButton 로그인

기본적으로 Facebook에서 작동하므로 모든 기능이 정상입니다.

이제 좀 더 스타일을 지정하고 사용자 정의 된 모양을주고 싶습니다. 나는 그렇게 할 수없는 것 같습니다.

저는 UIButton을 만들었습니다. UIButton을 이동하고 모양을 변경하고 기본적으로 모든 것을 제어 할 수 있습니다. 내 UIButton을 정확히 네이티브 페이스 북 LoginButton과 동일하게하고 싶습니다.

나는 Facebook의 문서에 갔다. 나는 모든 것을 시도했다. 작성한 코드를 복사/붙여 넣기하면 여러 오류가 발생합니다. 내가 찾을 수있는 모든 자습서를 시도했지만 도움이되지 않았습니다. 하나의 튜토리얼은 나에게 약간의 길을 주었지만 확실히 만들지는 않았다. 복사 한 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") 
} 


} 

답변

0

내가 할 수있는 방법을 발견 : 그 도움이된다면 여기

enter image description here

, 내 코드입니다. 나는 지금 권장하지는 않지만 완벽하게 작동합니다.

  1. 스토리 보드에 UIView를 추가하고 원하는 모양과 크기 ( )를 지정하십시오. 다음과 같이 수행하여 신속한 파일에 지금 UIView with FBSDKLoginButton Class

:

viewFBLogin.delegate = self 

: 당신의 viewDidLoad에서

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

이렇게 같은 -

  • 있는 UIView에게 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") 
    } 
    

    아무도 내가 같은 상황에 있었다면 도움이 될 것입니다.