如何从 Facebook + Swift + Parse 获取封面照片
Posted
技术标签:
【中文标题】如何从 Facebook + Swift + Parse 获取封面照片【英文标题】:How to get the cover photo from Facebook + Swift + Parse 【发布时间】:2015-10-22 14:32:25 【问题描述】:我的应用程序 swift 2.0 与 Facebook 集成了一个登录系统,我能够获取一些用户信息和 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")
)
此代码不适用于封面图片。
有什么想法吗?
【问题讨论】:
How to take cover_photo from Facebook in swift 2.0的可能重复 不,不是,我使用的是正确的字段cover
而不是pic_cover
我知道。但是您会在另一个问题的示例代码中找到解决问题的方法
【参考方案1】:
这是一个在 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 的新手,所以这段代码可能不是最好的。评论将不胜感激。
【讨论】:
【参考方案2】:这很有用。
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
)
【讨论】:
以上是关于如何从 Facebook + Swift + Parse 获取封面照片的主要内容,如果未能解决你的问题,请参考以下文章
如何从 swift 3 facebook 图形请求中解析这个 JSON
如何使用 Swift 3 从 Facebook SDK 下载照片?
如何从我的 Swift 应用程序请求 Facebook publish_actions 权限?
如何在 Swift 3 中获取 Facebook 用户 ID、电子邮件、图片类型(大)