iOS Facebook Graph 请求多种图片尺寸

Tho*_*mas 3 facebook facebook-graph-api ios swift

我正在使用 Facebook 的图形 API,并试图获取用户当前个人资料图片的两种不同图片大小。我希望一张图片大小为 250x250,另一张图片我希望大小为 1080x1080。这是我当前的代码:

    let params = ["fields": "first_name, last_name, email, picture.width(1080).height(1080)"]
    let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: params)
    graphRequest.startWithCompletionHandler { (connection, result, error) in
        if error != nil {
            print(error)
        }

    }
Run Code Online (Sandbox Code Playgroud)

这会将 URL 返回到大小为 1080x1080 的图片并起作用。现在,如果我更改参数以添加对大小为 250x250 的图片的请求:

let params = ["fields": "first_name, last_name, email, picture.width(250).height(250), picture.width(1080).height(1080)"]
Run Code Online (Sandbox Code Playgroud)

我收到此错误基本上是说我不能picture多次使用该字段:

Syntax error "Field picture specified more than once. This is only possible before version 2.1" at character 94: first_name, last_name, email, picture.width(250).height(250), picture.width(1080).height(1080)
Run Code Online (Sandbox Code Playgroud)

这是否意味着完成我想要的唯一方法是发出批处理请求?如果是这种情况,是否有一个函数在两个批处理请求都完成后被调用?

小智 7

还有另一种(更好的)方法可以通过使用field aliasing仅通过单个非批处理请求来执行此操作,这是我最近遇到相同问题时遇到的。

在 OP 的情况下,fields 参数将设置为:

first_name, last_name, email, picture.width(250).height(250).as(picture_small), picture.width(1080).height(1080).as(picture_large)
Run Code Online (Sandbox Code Playgroud)

然后,响应将包括两个名为picture_small 和picture_large 的字段,其中包含各自的图片数据。例如:

{
  "first_name": "Mark",
  "last_name": "Zuckerberg",
  "picture_small": {
    "data": {
      "height": 320,
      "is_silhouette": false,
      "url": "https://scontent.xx.fbcdn.net/hprofile-xtl1/v/t1.0-1/p320x320/12208495_10102454385528521_4749095086285673716_n.jpg?oh=e14ffdec03ceb6f30da80d1c4c5c4c02&oe=57254837",
      "width": 320
    }
  },
  "picture_large": {
    "data": {
      "height": 547,
      "is_silhouette": false,
      "url": "https://scontent.xx.fbcdn.net/hprofile-xtl1/v/t1.0-1/12208495_10102454385528521_4749095086285673716_n.jpg?oh=b008ae35daeea9b0d9babbee9d701a34&oe=572336EC",
      "width": 547
    }
  },
  "id": "4"
}
Run Code Online (Sandbox Code Playgroud)