简体   繁体   中英

How to get the cover photo from Facebook + Swift + Parse

I have a log in system in my app swift 2.0 integrated with Facebook, I'm able to get some user informations and profile_picture.

I'm wondering how to get the cover Image from the User logged :

let requestParameters = ["fields": "id, email, first_name, last_name, name, gender, cover"]

    let userDetails = FBSDKGraphRequest(graphPath: "me", parameters: requestParameters)

    userDetails.startWithCompletionHandler { (connection, result, error:NSError!) -> Void in

        if(error != nil)
        {
            print("\(error.localizedDescription)")
            return
        }

        if(result != nil)
        {

            let userId:String = result["id"] as! String
            let userFirstName:String? = result["first_name"] as? String
            let userLastName:String? = result["last_name"] as? String
            let userEmail:String? = result["email"] as? String
            let userName:String? = result["name"] as? String
            let userGender:String? = result["gender"] as? String
            let userCover:UIImage? = result["cover"] as? UIImage

            print(requestParameters)
            print(userDetails)
            print(userCover)
            print("\(userEmail)")

            let myUser:PFUser = PFUser.currentUser()!

            // Save first name
            if(userFirstName != nil)
            {
                myUser.setObject(userFirstName!, forKey: "firstNameColumn")

            }

            //Save last name
            if(userLastName != nil)
            {
                myUser.setObject(userLastName!, forKey: "lastNameColumn")
            }

            // Save email address
            if(userEmail != nil)
            {
                myUser.setObject(userEmail!, forKey: "email")
            }

            // Save email address
            if(userGender != nil)
            {
                if (userGender == "male"){
                myUser.setObject("Masculino", forKey: "genderColumn")
                } else {
                    myUser.setObject("Feminino", forKey: "genderColumn")
                }
            }





            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {

                // Get Facebook profile picture
                let userProfile = "https://graph.facebook.com/" + userId + "/picture?type=large"

                let profilePictureUrl = NSURL(string: userProfile)

                let profilePictureData = NSData(contentsOfURL: profilePictureUrl!)

                if(profilePictureData != nil)
                {
                    let profileFileObject = PFFile(data:profilePictureData!)
                    myUser.setObject(profileFileObject!, forKey: "photoUserColumn")
                }


                myUser.saveInBackgroundWithBlock({ (success:Bool, error:NSError?) -> Void in

                    if(success)
                    {
                        print("User details are now updated")
                    }

                })



            }

This code its not working just for the cover Image.

Any ideas?

Here's a working example using fb sdk in swift. I posted this answer in the other question as well but because this answer came up first for me on google I thought it'll be nice to put it here as well.

I needed to get the cover photo of a page so in the graphPath I used page id. This parameter can be easily changed to fit users / events / etc...

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 - I'm a newbie in swift / ios so this code might not be the best. Comments will be appreciated.

It can be useful.

let emailRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name, id,cover"], tokenString: result?.token.tokenString, version: nil, httpMethod: "GET")
    _ = emailRequest?.start(completionHandler: { (nil, resultParameters, error) in
         if(error == nil) {
                 if let cover = (params?["cover"] as? NSDictionary)["source"]{ 
                    var coverUrl = cover as?  String
           }
        }
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM