如何从Facebook获取个人资料照片

4

我想获取用户的个人资料图片。但是由于Facebook已经更新了其API SDK到v4.0或更高版本,而且在FB开发者网站上,他们正在用Objective C进行解释,但我需要Swift代码。我不知道如何在我的代码中使用FBSDKProfilePicture。我需要帮助获取用户的个人资料图片。

我想将图片存储在我的第二个视图中。请任何人帮我编写代码。 这是我的代码。

class ViewController: UIViewController, FBSDKLoginButtonDelegate {

let loginManager = FBSDKLoginManager()
let loginView : FBSDKLoginButton = FBSDKLoginButton()

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

    if (FBSDKAccessToken.currentAccessToken() != nil)
    {
        println("user already logged in")
        loginManager.logOut()
        // User is already logged in, do work such as go to next view controller.
    }

    self.view.addSubview(loginView)
    loginView.center = self.view.center
    loginView.readPermissions = ["public_profile", "email", "user_friends"]
    loginView.delegate = self
    FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "onProfileUpdated:", name:FBSDKProfileDidChangeNotification, object: nil)

}

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

}

2个回答

13
如果您能使用Facebook登录,则应该拥有该用户的FB ID。有了这个,您可以使用它来获取该用户的个人资料图片。

如果您能够使用 Facebook 登录,则应该拥有该用户的 FB ID。有了这个信息,您就可以获取该用户的个人资料图片:

func getProfPic(fid: String) -> UIImage? {
    if (fid != "") {
        var imgURLString = "http://graph.facebook.com/" + fid! + "/picture?type=large" //type=normal
        var imgURL = NSURL(string: imgURLString)
        var imageData = NSData(contentsOfURL: imgURL!)
        var image = UIImage(data: imageData!)
        return image
    }
    return nil
}
您也可以在URL中更改type参数以获得不同大小。

2
我建议在URL中使用picture?width=10000,因为它会返回比type=large更大的尺寸。 - Sega-Zero
取决于 @Pankaj Kumar 想要什么,我猜。 - BHendricks
调用这个函数时,我应该传递哪个参数?是用户 ID 还是用户名?@BHendricks - Pankaj Kumar
您刚刚登录的用户的Facebook ID。 - BHendricks
添加此函数后,会获取图片。但是这个函数在prepareforsegue方法之后调用,所以我在那里得到了一个空值。你能说一下如何解决吗?@ Hendricks - Pankaj Kumar
如果你在其他问题上卡住了,请再提出另一个问题。我很高兴这张图片被正确地获取了! - BHendricks

1

要获取自定义大小的图像:添加所需尺寸的宽度和高度参数。

例如http://graph.facebook.com/[your_fbid]/picture?type=large&redirect=true&width=500&height=500

func getProfPic(fid: String) -> UIImage? {
    if (fid != "") {
        var imgURLString = "http://graph.facebook.com/" + fid! + "/picture?type=large&redirect=true&width=500&height=500" //replace 500 with your desired size
        var imgURL = NSURL(string: imgURLString)
        var imageData = NSData(contentsOfURL: imgURL!)
        var image = UIImage(data: imageData!)
        return image
    }
    return nil
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接