Facebook在Swift中没有FBSDKLoginButton登录

时间:2015-07-02 07:31:49

标签: ios facebook swift

我正在尝试为我的应用添加facebook登录信息。我正在使用带有自己的按钮的FBSDKLoginButton,一旦你登录它就会转向注销。我不想要那一切。我只需要添加自己的按钮视图。在那个按钮的@IBAction中,我想要登录facebook。我现在使用的代码是

class ViewController: UIViewController,FBSDKLoginButtonDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        if (FBSDKAccessToken.currentAccessToken() != nil)
        {
            // User is already logged in, do work such as go to next view controller.
        }
        else
        {
            let loginView : FBSDKLoginButton = FBSDKLoginButton()
            self.view.addSubview(loginView)
            loginView.center = self.view.center
            loginView.readPermissions = ["public_profile", "email", "user_friends"]
            loginView.delegate = self
        }

    }


    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        println("User Logged In")

        if ((error) != nil)
        {
            // Process error
        }
        else if result.isCancelled {
            // Handle cancellations
        }
        else {
            returnUserData()
            // If you ask for multiple permissions at once, you
            // should check if specific permissions missing
            if result.grantedPermissions.contains("email")
            {
                // Do work
            }
        }
    }

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
        println("User Logged Out")
    }

    func returnUserData()
    {
        let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
        graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

            if ((error) != nil)
            {
                // Process error
                println("Error: \(error)")
            }
            else
            {
                println("fetched user: \(result)")
                let userName : NSString = result.valueForKey("name") as! NSString
                println("User Name is: \(userName)")
                let userEmail : NSString = result.valueForKey("email") as! NSString
                println("User Email is: \(userEmail)")
            }
        })

    }


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


}

如何自定义并实现我的需求。提前谢谢。

3 个答案:

答案 0 :(得分:6)

您可能想查看最新的FacebookSDK,这是我的内容:

@IBAction func connectWithFacebook(){

    if FBSDKAccessToken.currentAccessToken() != nil {
        FBSDKLoginManager().logOut()
        return
    }

    let login:FBSDKLoginManager = FBSDKLoginManager()
    login.logInWithReadPermissions(["email"], handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
        if(error != nil){
            FBSDKLoginManager().logOut()
        }else if(result.isCancelled){
            FBSDKLoginManager().logOut()
        }else{
             //Handle login success
        }
    })
}

否则使用较旧的SDK,您可以执行以下操作:

  • 将FBSDKLoginButton添加到您的视图并将其设置为不可见
  • 添加自定义按钮
  • 在您的自定义按钮上,IBAction使用方法sendActionsForControlEvents执行单击FBSDKLoginButton

答案 1 :(得分:4)

如果通过自定义按钮处理FB登录,则可以使用FBSDKLoginManager。

有关详情,请查看this

答案 2 :(得分:0)

设置当前访问权限为nil。

  

这调用[FBSDKAccessToken setCurrentAccessToken:nil]和   [FBSDKProfile setCurrentProfile:nil]。

FBSDKAccessToken.setCurrentAccessToken(无)

对于Facebook退出。