如何从Facebook + Swift + Parse

时间:2015-10-22 14:32:25

标签: ios facebook swift parse-platform

我在我的应用程序swift 2.0中集成了一个登录系统,我可以获得一些用户信息和profile_picture。

我想知道如何从用户登录中获取封面图片:

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

                })



            }

此代码仅适用于封面图片。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是一个在swift中使用fb sdk的工作示例。我在另一个问题中也发布了这个答案,但是因为谷歌的这个答案首先出现在我面前,所以我觉得把它放在这里也很好。

我需要获取页面的封面照片,所以在graphPath中我使用了页面ID。可以轻松更改此参数以适合用户/事件/等...

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

P.S - 我是swift / ios的新手,所以这段代码可能不是最好的。评论将不胜感激。

答案 1 :(得分:0)

它很有用。

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