【问题标题】:Use Facebook App-scoped Id for ProfilePictureView为 ProfilePictureView 使用 Facebook 应用范围的 ID
【发布时间】:2018-03-27 15:17:29
【问题描述】:

我正在为 android 应用程序实现 facebook 的 SDK。我有一个ProfilePictureView,需要填写:

profilePictureView.setProfileId(id)

昨天,如果我使用配置文件的应用范围 ID(由 Graph API 返回的 ID),它会起作用:这是我唯一拥有的 ID,因为获取“真实”ID 显然违反了 Facebook 政策。

但是今天,没有任何修改,它返回一个空图像。我猜他们改变了后端,但如果是这样,ProfilePictureView 的目的是什么?如果它需要一个违反 Facebook 政策的 id 来获取?

【问题讨论】:

标签: android facebook facebook-sdk-4.0


【解决方案1】:

自 2018 年 3 月 26 日起,所有与手动链接相关的解决方案均不再有效

使用下面的代码

private static String FACEBOOK_FIELD_PROFILE_IMAGE = "picture.type(large)";
    private static String FACEBOOK_FIELDS = "fields";

    private void getFacebookData() {
        GraphRequest request = GraphRequest.newMeRequest(
                AccessToken.getCurrentAccessToken(),
                (object, response) -> {
                    updateAvatar(getImageUrl(response));
                });
        Bundle parameters = new Bundle();
        parameters.putString(FACEBOOK_FIELDS, FACEBOOK_FIELD_PROFILE_IMAGE);
        request.setParameters(parameters);
        request.executeAsync();
    }

    private static String FACEBOOK_FIELD_PICTURE = "picture";
    private static String FACEBOOK_FIELD_DATA = "data";
    private static String FACEBOOK_FIELD_URL = "url";
    private String getImageUrl(GraphResponse response) {
        String url = null;
        try {
            url = response.getJSONObject()
                    .getJSONObject(FACEBOOK_FIELD_PICTURE)
                    .getJSONObject(FACEBOOK_FIELD_DATA)
                    .getString(FACEBOOK_FIELD_URL);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return url;
    }

【讨论】:

  • 谢谢,代码有效,我将使用该解决方案,现在旧代码再次有效。也许这是他们刚刚解决的一个临时(但相当长)的后端问题。
  • 我现在才注意到这个解决方案非常适合用户的个人资料图片,但是知道他的 id 的另一个用户的个人资料图片呢?
【解决方案2】:

我会回答我自己,因为这个问题专门要求“在给定 id 的情况下获取个人资料图片”,而 Levon 的启发性答案仅适用于当前用户。

private static String FACEBOOK_FIELD_PROFILE_IMAGE = "picture.type(large)";
private static String FACEBOOK_FIELDS = "fields";
private static String FACEBOOK_FIELD_PICTURE = "picture";
private static String FACEBOOK_FIELD_DATA = "data";
private static String FACEBOOK_FIELD_URL = "url";

public static void getFacebookProfileUrl(String id, final Response<String> response) {
    GraphRequest request = GraphRequest.newGraphPathRequest(
            AccessToken.getCurrentAccessToken(),
            "/" + id,
            new GraphRequest.Callback() {
                @Override
                public void onCompleted(GraphResponse graph) {
                    String imgUrl = getImageUrl(graph);
                    // imgUrl is the url of the profilepic of the user with given id. 
                    // Works both for "real" id and "app-scoped" id
                }
            });

    Bundle parameters = new Bundle();
    parameters.putString(FACEBOOK_FIELDS, FACEBOOK_FIELD_PROFILE_IMAGE);
    request.setParameters(parameters);
    request.executeAsync();
}


private static String getImageUrl(GraphResponse response) {
    String url = null;
    try {
        url = response.getJSONObject()
                .getJSONObject(FACEBOOK_FIELD_PICTURE)
                .getJSONObject(FACEBOOK_FIELD_DATA)
                .getString(FACEBOOK_FIELD_URL);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return url;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多