Swift。 Facebook 个人资料图片返回问号?

Swift. Facebook profile picture returning a question mark?

好的,当我尝试接收用户个人资料图片时,图片 returns 是一个带有问号的白框?

这是我的代码:

func getProfilePic(fid: String) -> SKTexture? {
  let imgURL = NSURL(string: "http://graph.facebook.com/" + fid + "/picture?type=large")
  let imageData = NSData(contentsOfURL: imgURL!)
  let imageUI = UIImage(data: imageData!)
  let image = SKTexture(image: imageUI!)
  return image
}

func getFBUserData() {
  if((FBSDKAccessToken.currentAccessToken()) != nil) {
    FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email, picture"]).startWithCompletionHandler({ (connection, result, error) -> Void in
      if (error == nil){
        print(result)
        if let userData = result as? NSDictionary {
          personalUserID = userData["id"] as! String
        }
      } else {
        print("error")
      }
    })
  }
  picture.texture = getProfilePic("\(personalUserID)")

如何让它显示正确的图片?

我猜你的个人资料照片不适用于 public。现在您没有为请求提供访问令牌,因此请求被处理为未经授权 - 因此您只能看到 public 眼睛所见。

修复它:

func getProfilePic(fid: String) -> SKTexture? {
    let imgURL = NSURL(string: "http://graph.facebook.com/" + fid + "/picture?type=large&access_token=" + FBSDKAccessToken.currentAccessToken().tokenString)
    let imageData = NSData(contentsOfURL: imgURL!)
    let imageUI = UIImage(data: imageData!)
    let image = SKTexture(image: imageUI!)
    return image
}

此外,您需要使用 https 和当前 API 版本 v2.5 来发出请求,否则您的代码可能会在 Facebook 进行更改时随时中断。所以,考虑到这一点:

func getProfilePic(fid: String) -> SKTexture? {
    let imgURL = NSURL(string: "https://graph.facebook.com/v2.5/" + fid + "/picture?type=large&access_token=" + FBSDKAccessToken.currentAccessToken().tokenString)
    let imageData = NSData(contentsOfURL: imgURL!)
    let imageUI = UIImage(data: imageData!)
    let image = SKTexture(image: imageUI!)
    return image
}

这应该可以解决问题。