Facebook Graph API getCover不再工作了

时间:2016-09-15 01:41:26

标签: android facebook-graph-api

故事

我在Playstore上有一个应用程序,用于下载用户的封面照片并设置为抽屉的背景。

重要的是什么?

它停止工作我正在使用下面的链接,它工作就像一个魅力,但它不再工作,现在我只得到用户的ID但没有封面

之前的工作是什么?

https://graph.facebook.com/{my id}?fields=cover&access_token={my token}

故障排除

我认为这可能是我在我的代码中没有注意到的事情,所以从Playstore下载了我的应用程序,我遇到同样的问题,封面没有下载,所以在这一点上我几乎可以确定问题是什么的与Facebook本身一起做

我相信是与权限有关,因为我得到了一个响应但不是封面的source但是如果它与我的用户一起工作我不知道为什么这不再工作

尝试修复问题失败

我去了Facebook Developers页面,我尝试了这个

new GraphRequest(
AccessToken.getCurrentAccessToken(),
"...?fields=cover", 
null,
HttpMethod.GET,
new GraphRequest.Callback() {
    public void onCompleted(GraphResponse response) {
        Log.d(TAG, response.toString());
    }
}
).executeAsync();

可悲的是,这不起作用,在Facebook开发者页面中他们显示"...?fields={fieldname_of_type_CoverPhoto}"我相信fieldname coverPhotocover,就像我看到here

结果

这将记录

{Response:  responseCode: 404, graphObject: null, error:
{HttpStatus: 404, errorCode: 803, errorType: OAuthException, errorMessage: (#803) 
Some of the aliases you requested do not exist: ...}}

我试图删除3个点,我试图添加me?fields=cover得到了这个:

{Response:  responseCode: 404, graphObject: null, error:
{HttpStatus: 404, errorCode: 803, errorType: OAuthException, errorMessage: (#803) 
Some of the aliases you requested do not exist: fields=cover}}

修改

我试过这个

Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(AccessToken.getCurrentAccessToken(), "me", params, HttpMethod.GET,
          new GraphRequest.Callback() {
          @Override
          public void onCompleted(GraphResponse response) {
               if (response != null) {
                  try {
                     JSONObject data = response.getJSONObject();
                     Log.d(TAG, data.toString());
                  } catch (Exception e) {
                      e.printStackTrace();
                      Log.d(TAG, "ERROR");
                }
           }
        }
  }).executeAsync();

这会打印我的所有信息但没有封面

2 个答案:

答案 0 :(得分:3)

我能解决这个问题

现在我们需要使用user_photos权限,我相信这是最近发生的变化,因为我的应用程序在Playstore上工作了将近一个月而没有user_photos

记得你需要申请一个新的权限,你可以用这个

来做
if(!AccessToken.getCurrentAccessToken().getPermissions().contains("user_photos")) {
     LoginManager.getInstance().logInWithReadPermissions(
     this,
     Arrays.asList("user_photos"));
}

答案 1 :(得分:0)

在Facebooks API的早期版本中,可以在访问图形API时通过像往常一样在GET参数“ fields”中添加“ cover”作为值来获取用户的封面照片(?fields = cover)。这以前是有效的。

但是,Facebook用“ UserCoverPhoto”替换了“ cover”,然后最终消除了从用户API版本3.2检索封面照片的可能性,如以下官方链接所示: https://developers.facebook.com/docs/graph-api/reference/v3.2/user 3.2 facebook api

即使允许的最旧的facebook API版本2.8也没有此功能。

遗憾的是,您必须构建另一个解决方案。

您将必须使用“用户/照片” API,然后允许他们选择要在应用程序中用作封面的照片。 https://developers.facebook.com/docs/graph-api/reference/user/photos/

一个不建议使用的解决方案(可能会违反TOS并可能导致您被禁)将围绕非私有用户的API构建解决方案。