Swift. Изображение профиля на Facebook, возвращающее знак вопроса?

Хорошо, поэтому, когда я пытаюсь получить изображение профиля пользователя, оно возвращает белое поле с вопросительным знаком?

Вот мой код:

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

Как мне заставить его показать правильную картинку?

1 ответ

Решение

Я предполагаю, что ваша фотография профиля не доступна для общественности. Теперь вы не предоставляете токен доступа вместе с запросом, поэтому запрос обрабатывается как неавторизованный, поэтому вы видите только то, что видит общественный взгляд.

Починить это:

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
}

Это должно делать свое дело.

Другие вопросы по тегам