如何使用React Native Facebook SDK GraphRequest获得高质量的个人资料图片?

时间:2017-02-25 15:17:30

标签: javascript facebook facebook-graph-api react-native facebook-javascript-sdk

我尝试使用React Native Facebook SDK获取高分辨率图片,但默认图片质量非常差。它的分辨率为50x50,分辨率非常低。

请求:

new GraphRequest('/135121013672357',
  {
    parameters: {
      fields: {
        string: 'picture'
      }
    }
  },
  _responseInfoCallback
)

响应

{
  "picture": {
    "data": {
      "is_silhouette": false,
      "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/16864988_145199975997794_4154735936748679550_n.jpg?oh=bb5f32ecb73dd9b8fb8ac45920e2ffc5&oe=593223A8"
    }
  },
  "id": "135121013672357"
}

查看Facebook's Graph API docs,有一个参数" type",可以请求特定大小(小,中,大)。但是,目前还不清楚如何格式化该请求。

picture?type=large // Error

picture{type:large} // 200 However, picture is omitted from Response

4 个答案:

答案 0 :(得分:8)

尝试使用Graph API field expansion获取资源:

picture.type(large)

答案 1 :(得分:4)

您还可以使用.height和.width来获得更高分辨率的图片或您需要的分辨率:

480x{any-width}图片的示例端点: /me?fields=id,name,picture.height(480),[:other_fields]

{any-height}x480图片的示例端点: /me?fields=id,name,picture.width(480),[:other_fields]

最大分辨率图像的示例端点: /me?fields=id,name,picture.height(10000),[:others_fields]

官方文档位于https://developers.facebook.com/docs/graph-api/reference/user/picture//{node-id}/picture页面。 您可以在不通过以下应用程序进行调试的情况下尝试使用API​​:https://developers.facebook.com/tools/explorer/

答案 2 :(得分:3)

以下是一个示例,说明如何使用react-native-fbsdk软件包以简单的方式获取大型Facebook用户个人资料图片。

try {
  const currentAccessToken = await AccessToken.getCurrentAccessToken()

  const graphRequest = new GraphRequest('/me', {
    accessToken: currentAccessToken.accessToken,
    parameters: {
      fields: {
        string: 'picture.type(large)',
      },
    },
  }, (error, result) => {
    if (error) {
      console.error(error)
    } else {
      console.log(result.picture.data.url)
    }
  })

  new GraphRequestManager().addRequest(graphRequest).start()
} catch (error) {
  console.error(error)
}

答案 3 :(得分:0)

onFBLogin = async () => {
        try{
        const result = await LoginManager.logInWithPermissions([
           'public_profile',
           'email',
        ]);
       const tokenObj = await AccessToken.getCurrentAccessToken();
        const infoRequest = new GraphRequest(
            '/me',
            {
                accessToken: tokenObj.accessToken,
                parameters: {
                    fields: {
                        string: 'email,name,first_name,middle_name,last_name,gender,address,picture.type(large)',
                    },
                },
            },
            this.infoResponseCallback,
        );
       new GraphRequestManager().addRequest(infoRequest).start()
    }catch(err){
        console.log("error",err)
    }

infoResponseCallback = (error,success) =>{
        if(error){
              console.log("eeeeeeeeeee",error)
        }else{
              console.log(success)
        }
    }