通过Facebook Graph API获取个人资料图片返回“不支持的URL”

我正在开发iOS的应用程序,用户应该用Facebooklogin。 所以我想获得用户个人资料图片,但下面的代码是返回"unsupported URL"

 FBRequestConnection.startWithGraphPath("\(userID)/picture?type=large&access_token=207613839327374|BgKi3AePtvg1oDO8GTbWqqLE_SM", completionHandler: { (connection, result, error) -> Void in if (error? != nil){ NSLog("error = \(error)") }else{ println(result) } }) 

UPDATE

以下更改:

 FBRequestConnection.startWithGraphPath("\(userID)/picture?type=large", completionHandler: { (connection, result, error) -> Void in if (error? != nil){ NSLog("error = \(error)") }else{ println(result) } }) 

正在返回:

 error = Error Domain=com.facebook.sdk Code=6 "Response is a non-text MIME type; endpoints that return images and other binary data should be fetched using NSURLRequest and NSURLConnection" UserInfo=0x786d4790 

能够使用这个代码得到它:

  // Get user profile pic var fbSession = PFFacebookUtils.session() var accessToken = fbSession.accessTokenData.accessToken let url = NSURL(string: "https://graph.facebook.com/me/picture?type=large&return_ssl_resources=1&access_token="+accessToken) let urlRequest = NSURLRequest(URL: url!) NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) { (response:NSURLResponse!, data:NSData!, error:NSError!) -> Void in // Display the image let image = UIImage(data: data) self.imgProfile.image = image } 

你可以这样做:

  // accessToken is your Facebook id func returnUserProfileImage(accessToken: NSString) { var userID = accessToken as NSString var facebookProfileUrl = NSURL(string: "http://graph.facebook.com/\(userID)/picture?type=large") if let data = NSData(contentsOfURL: facebookProfileUrl!) { imageProfile.image = UIImage(data: data) } } 

这是我获得我的Facebook ID的方式:

 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)") if let id: NSString = result.valueForKey("id") as? NSString { println("ID is: \(id)") self.returnUserProfileImage(id) } else { println("ID es null") } } }) } 

我正在使用Xcode 6.4Swift 1.2

您可以简单地通过使用以下url获取configuration文件图片: https : //graph.facebook.com/userID/picture? type =large

其中userID是您用户的Facebook ID。

使用PFFVideosUtils你可以得到这样的个人资料:

 let pictureRequest = FBSDKGraphRequest(graphPath: "me/picture?type=normal&redirect=false", parameters: nil) pictureRequest.startWithCompletionHandler({ (connection, result, error: NSError!) -> Void in if error == nil && result != nil { let imageData = result.objectForKey("data") as! NSDictionary let dataURL = data.objectForKey("url") as! String let pictureURL = NSURL(string: dataURL) let imageData = NSData(contentsOfURL: pictureURL!) let image = UIImage(data: imageData!) } }) 

这行代码工作正常获取个人资料图片。

 @IBOutlet var profilePic: UIImageView! func loginViewFetchedUserInfo(loginView: FBLoginView!, user: FBGraphUser!) { println("User:\(user)") println("User ID:\(user.objectID)") println("User Name:\(user.name)") var userEmail = user.objectForKey("email") as String println("User Email:\(userEmail)") // Get user profile pic let url = NSURL(string: "https://graph.facebook.com/\(user.objectID)/picture?type=large") let urlRequest = NSURLRequest(URL: url!) NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) { (response:NSURLResponse!, data:NSData!, error:NSError!) -> Void in // Display the image let image = UIImage(data: data) self.profilePic.image = image } } 

我的例子。 请不要关注用户

 import Foundation import FBSDKCoreKit import FBSDKLoginKit import SVProgressHUD import SDWebImage class FacebookManager { // MARK: - functions static func getFacebookProfileData(comletion: ((user: User?, error: NSError?) -> ())?) { SVProgressHUD.showWithStatus(StringModel.getting) let loginManager = FBSDKLoginManager() loginManager.loginBehavior = .SystemAccount loginManager.logInWithReadPermissions(nil, fromViewController: nil) { (tokenResult, error) in if error == nil { guard let token = tokenResult?.token?.tokenString else { SVProgressHUD.dismiss() return } getFacebookProfile(token, completion: { (error, user) in if error == nil { comletion?(user: user, error: error) SVProgressHUD.dismiss() } else { SVProgressHUD.dismiss() print(error?.localizedDescription) } }) } else { SVProgressHUD.dismiss() print(error.localizedDescription) } } } private static func getFacebookProfile(token: String, completion: ((error: NSError?, user: User?) -> ())?) { FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "email, name"], HTTPMethod: "GET").startWithCompletionHandler { (requestConnection, result, error) in if error == nil { guard let resultDictionary = result as? [String : AnyObject] else { return } guard let email = resultDictionary["email"] as? String else { return } guard let id = resultDictionary["id"] as? String else { return } guard let name = resultDictionary["name"] as? String else { return } getFacebookProfileImage(id, completion: { (image, error) in if error == nil { let user = User(facebookName: name, facebookID: id, facebookEmail: email, facebookProfileImage: image) completion?(error: nil, user: user) } }) } else { print(error.localizedDescription) completion?(error: nil, user: nil) } } } private static func getFacebookProfileImage(userID: String, completion: ((image: UIImage?, error: NSError?) -> ())) { guard let facebookProfileImageURL = NSURL(string: "https://graph.facebook.com/\(userID)/picture?type=large") else { return } print(facebookProfileImageURL) let sdImageManager = SDWebImageManager.sharedManager() sdImageManager.downloadImageWithURL(facebookProfileImageURL, options: .AvoidAutoSetImage, progress: nil) { (image, error, cachedType, bool, url) in if error == nil { completion(image: image, error: nil) } else { completion(image: nil, error: error) print(error.localizedDescription) } } } }