FacebookSDK(4.1.x)自定义登录UI按钮 - Swift(1.2)

sen*_*nty 7 facebook ios swift

按照本教程,我设法使Facebook登录按钮工作.但是,它会自动从SDK中分配按钮图像,并且无法自定义(因为它没有在Storyboard上创建),因此我无法使用自己的按钮图像或文本.

我相信这部分代码(在ViewDidLoad中)是分配按钮:

        let loginView : FBSDKLoginButton = FBSDKLoginButton()
        self.view.addSubview(loginView)
        loginView.center = self.view.center
        loginView.readPermissions = ["public_profile", "email"]
        loginView.delegate = self
Run Code Online (Sandbox Code Playgroud)

我需要做的是在Storyboard上创建一个@IBOutlet按钮并从那里进行自定义.我怎样才能做到这一点?

Dha*_*iya 35

使用自定义按钮和访问令牌登录.

在facebook sdk 4.x中获取用户信息

迅速

@IBAction func btnFBLoginPressed(sender: AnyObject) {
    var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self, handler: { (result, error) -> Void in
        if (error == nil){
            var fbloginresult : FBSDKLoginManagerLoginResult = result
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                self.getFBUserData()
                fbLoginManager.logOut()
            }
        }
    })
}

func getFBUserData(){
    if((FBSDKAccessToken.currentAccessToken()) != nil){
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
            if (error == nil){
                println(result)
            }
        })
    }
}
Run Code Online (Sandbox Code Playgroud)


San*_*món 7

使用上一个Facebook SDK(2016年5月1日)和Swift 2.1更新了答案

使用Interface Builder或代码创建UIButton,并将该按钮的操作链接到:

@IBAction func loginFacebookAction(sender: AnyObject) {
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.logInWithReadPermissions(["email"], fromViewController: self) { (result, error) -> Void in
        if (error == nil){
            let fbloginresult : FBSDKLoginManagerLoginResult = result
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                self.getFBUserData()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上一个代码的幸福案例触发函数self.getFBUserData(),因此您必须在同一个文件中实现该函数

func getFBUserData(){
    if((FBSDKAccessToken.currentAccessToken()) != nil){
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
            if (error == nil){
                //everything works print the user data
                print(result)
            }
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 修改结果检查以避免错误"在展开可选项时获取nil",以防用户取消而不是Ok,当Facebook对话框显示"您已经授权..."时.使用if fbloginresult.grantedPermissions!= nil && fbloginresult.grantedPermissions.contains("email"){而不仅仅是试图查看grantPermissions包含的电子邮件 (2认同)