0

通过 Parse 使用 Facebook 登录时无法获取用户的姓名或电子邮件。我应该在 AppDelegate 中正确设置其他所有内容。

当我用我的电子邮件登录时,我的用户类工作,并且可以使用我注册的数据。当我尝试通过 Facebook 登录时,我只将长字母数字字符串作为用户名并停止。我想检索姓名、照片、出生和城市。

在我的 User.swift 文件中,我得到了这个:

import Foundation

struct User
{
    let username : String
    let address : String
}

这是我的登录按钮:

@IBAction func facebookLoginAction(sender: UIButton)
    {
        PFFacebookUtils.logInInBackgroundWithReadPermissions(["public_profile", "user_about_me", "user_birthday"]) {
            (user: PFUser?, error: NSError?) -> Void in
            if let user = user
            {
                if user.isNew
                {
                    println("User signed up and logged in through Facebook!")
                }
                else
                {
                    println("User logged in through Facebook!")
                }
                self.dismissViewControllerAnimated(true, completion: nil)
            }
            else
            {
                println("Uh oh. The user cancelled the Facebook login.")
            }
        }
    }

也试过这个,但不起作用:

    func getUserInfo() {
//        if let session = PFFacebookUtils.session() {
        if let session = PFFacebookUtils.facebookLoginManager() {
            if session.isOpen {
                println("session is open")
                FBRequestConnection.startForMeWithCompletionHandler({ (connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
                    //println("done me request")
                    if error != nil {
                        println("facebook me request - error is not nil :(")
                    } else {
                        println("facebook me request - error is nil :) ")
                        let urlUserImg = "http://graph.facebook.com/\(result.objectID)/picture?type=large"
                        let firstName = result.first_name
                        let lastName = result.last_name
                    }
                })
            }
        } else {
            //let user:PFUser = PFUser.currentUser()
            //println("ohooo \(user)")
        }
    }

提前致谢

4

1 回答 1

0

这是我用来通过 Parse 获取 Facebook 信息的工作代码。该函数在使用 成功验证后调用user.isNew。即使用户不是新用户也可以调用它,以确保在他们重新登录时您拥有最新的信息。

func loadFacebookData() {
    let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, name, id"])
    graphRequest.startWithCompletionHandler { (connection, result, error) -> Void in
        if error != nil {
            let error = error!.userInfo["error"] as! String
        }
        else {
            if let userName = result.valueForKey("name") as? String, email = result.valueForKey("email") as? String, id = result.valueForKey("id") as? String {
                let pictureURL: NSURL = NSURL(string: "https://graph.facebook.com/\(id)/picture?type=large&return_ssl_resources=1")!
                let user = PFUser.currentUser()!
                let query = PFUser.query()
                query!.whereKey("email", equalTo: email)
                query!.getFirstObjectInBackgroundWithBlock({ (oldUser: PFObject?, error) -> Void in
                    if error != nil && oldUser != nil {
                        let error = error!.userInfo["error"] as! String
                    }
                    else {
                        self.setFacebookInfo(user, userEmail: email, userName: userName, pictureURL: pictureURL)
                    }
                })
            }
        }

    }
}
于 2015-10-11T16:16:47.583 回答