如何从swift 2.0中从Facebook的cover_photo

我试图从Facebook上获取用户的封面照片,但是我遇到了一些问题…这是我的代码

import UIKit import FBSDKCoreKit import FBSDKLoginKit class ViewController: UIViewController, FBSDKLoginButtonDelegate { @IBOutlet weak var name : UILabel! @IBOutlet weak var sesso: UILabel! @IBOutlet weak var immagineProfilo : UIImageView! @IBOutlet weak var immagineCopertina: UIImageView! override func viewDidLoad() { super.viewDidLoad() if (FBSDKAccessToken.currentAccessToken() == nil) { print("Not logged in..") } else { print("Logged in..") } let loginButton = FBSDKLoginButton() loginButton.readPermissions = ["public_profile", "email"] loginButton.center = CGPointMake(80, 100) loginButton.delegate = self self.view.addSubview(loginButton) } func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { if error == nil { print("Login complete.") /* let protectedPage = self.storyboard?.instantiateViewControllerWithIdentifier("ProfileViewController") as! ProfileViewController let protectedPageNav = UINavigationController(rootViewController: protectedPage) let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate appDelegate.window?.rootViewController = protectedPageNav*/ if let _ = result.token{ //Get user acces token let _:FBSDKAccessToken=result.token print("Token = \(FBSDKAccessToken.currentAccessToken().tokenString)") print("User ID = \(FBSDKAccessToken.currentAccessToken().userID)") } //Show user information let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name,picture, email, gender, pic_cover"]) graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in if ((error) != nil) { // Process error print("Error: \(error)") } else { let imgURLCoverPhoto = "https://graph.facebook.com/\(FBSDKAccessToken.currentAccessToken().userID)/pic_cover? let imgURLCover = NSURL(string: imgURLCoverPhoto) let imageDataCoverPhoto = NSData(contentsOfURL: imgURLCover!) let imageCoverPhoto = UIImage(data: imageDataCoverPhoto!) self.immagineCopertina.image = imageCoverPhoto let imgURLString = "https://graph.facebook.com/\(FBSDKAccessToken.currentAccessToken().userID)/picture?width=10000" let imgURL = NSURL(string: imgURLString) let imageData = NSData(contentsOfURL: imgURL!) let image = UIImage(data: imageData!) self.immagineProfilo.image = image print("fetched user: \(result)") self.name.text = result.valueForKey("name") as! NSString as String self.name.text = result.valueForKey("gender") as! NSString as String } }) } else { print(error.localizedDescription) } } func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) { print("User logged out...") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

谢谢

这是一个在swift中使用fb sdk的工作示例。 该文档确实有帮助,但他们不是一个复制粘贴types的例子..我需要得到一个页面的封面照片,所以在我使用页面id的graphPath。 这个参数可以很容易地改变,以适应用户/事件/等…

 let request = FBSDKGraphRequest(graphPath: "\\(page.id)?fields=cover", parameters: [ "access_token": "your_access_token" ], HTTPMethod: "GET") request.startWithCompletionHandler({(connection , result , error) in if ((error) != nil) { print("Error in fetching cover photo for \\(page.id): \(error)", terminator: "") } else { if let data = result["cover"] as? NSDictionary { self.fetchImageFromUrl(data["source"] as! String, cb: {(image: UIImage) -> Void in //do something with image }) } }) func fetchImageFromUrl(url: String, cb: (UIImage) -> Void) { let urlObj = NSURL(string: url)! dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { let data = NSData(contentsOfURL: urlObj) dispatch_async(dispatch_get_main_queue(), { let image = UIImage(data: data!)! cb(image) }); } } 

PS – 我是swift / IOS中的新手,所以这个代码可能不是最好的。 意见将不胜感激。

看文档有时帮助:

正确的字段是cover ,而不是pic_cover中find的pic_cover