swift - 下载高分辨率个人资料图片 Facebook Graph API

标签 swift facebook-graph-api

使用 Swift 3.0,我可以使用这个图形调用函数下载当前用户图像:

fileprivate func getCurrenUserHighResImageURL() -> String? {
    var photoURLOutput : String?
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "picture.type(large)"])
    graphRequest.start(completionHandler: { connection, result , error -> Void in

        if ((error) != nil) {
            print("Error: \(error)")
        } else {
            let castedResult = result as? [String : AnyObject]
            if let castedResult = castedResult {

                if let photURL = castedResult["picture"] as? [String : AnyObject] {
                    let photoData = photURL["data"] as? [String : AnyObject]
                    photoURLOutput = photoData?["url"] as? String
                    if let photoURLOutput = photoURLOutput {
                        CURRENT_USER_URL.updateChildValues(["highResImageURL" : "\(photoURLOutput)"])
                    }
                }
            }
        }
    })
    return photoURLOutput
}

然而,这只会返回 200 x 200 像素的图像。 有什么方法可以调用更高分辨率的图形吗?

我看到人们使用这样的 URL 调用图形 API:https://graph.facebook.com/userId/picture?width=640&height=640

如本文所述:Facebook Graph Profile Picture Link

但是当我尝试从该 URL 下载图像时...

 func loadUserImage(fromURL urlString:String?) {
    if urlString != nil {
        let imgURL: URL = URL(string: urlString!)!
        let request: URLRequest = URLRequest(url: imgURL)

        let session = URLSession.shared
        let task = session.dataTask(with: request, completionHandler: {
            (data, response, error) -> Void in

            if (error == nil && data != nil) {
                func display_image() {
                    let userImage = UIImage(data: data!)
                    self.userImage.image = userImage
                }
                DispatchQueue.main.async(execute: display_image)
            }
        })
        task.resume()
    }
}

找不到图片。 (我知道此功能有效,因为它适用于所有其他图像)。当我直接在浏览器中输入链接时,它返回一个 JSON 错误,提示我没有授权。

有没有人幸运地进行过这样的图形调用?是否有一些我忽略的语法会返回更高分辨率的配置文件图像?

最佳答案

这就是我必须在 iPhone 7 上请求 200x200,在加大尺寸上请求 300x300。但是,我不认为您会得到具有这些确切尺寸的图像。它可能会稍微大一些。

let deviceScale = Int(UIScreen.main.scale)
let width = 100 * deviceScale
let height = 100 * deviceScale
let parameters = ["fields": "first_name, last_name, picture.width(\(width)).height(\(height))"]

总而言之,请求 400x400 的参数语法为 picture.width(400).height(400)

关于swift - 下载高分辨率个人资料图片 Facebook Graph API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40053157/

相关文章:

iOS:将图像按钮的值传递给类中函数的好方法

javascript - 使用 wkwebview 从 javascript 调用返回值的 swift 函数

azure - Facebook Graph API 的重大变更是否由 Azure AD B2C 处理?

php - 从群组检索帖子时 Facebook api 返回可捕获的 fatal error

javascript - Facebook API - 添加新照片 (Javascript sdk)

facebook - FB Graph API v2.0 中 Friends_events 权限的替代品是什么?

ios - 我怎样才能在 Ios sdk 的 facebook 上获得 friend 生日和用户生日

swift - CloudKit 错误处理 - 重试逻辑

ios - 从当前位置添加注释

ios - 将 UITableViewController 更改为 UITableView 会使应用程序崩溃