【问题标题】:Android - Get profile cover picture from FacebookAndroid - 从 Facebook 获取个人资料封面图片
【发布时间】:2014-08-13 22:46:40
【问题描述】:

我正在使用 Facebook SDK 和 Parse SDK,我想检索个人资料封面图片。

我正在做以下事情:

new Request(
        ParseFacebookUtils.getSession(),
        "/me?fields=cover",
        null,
        HttpMethod.GET,
        new Request.Callback() {
                public void onCompleted(Response response) {
                            Log.wtf("TAG",
                            response.toString());
                }
}).executeAsync();

但我无法得到正确的响应,因为它说我需要一个访问令牌(用户已经登录)。

{Response:  
    responseCode: 400, 
    graphObject: null, 
    error: {
        HttpStatus: 400, 
        errorCode: 2500, 
        errorType: OAuthException, 
        errorMessage: An active access token must be used to query information about the current user.
    }, 
    isFromCache:false
}

有什么可用的解决方法吗?

【问题讨论】:

  • 您在登录时请求了哪些读取权限?
  • @ItzikSamara 这个“public_profile”、“email”、“user_friends”、“user_photos”
  • 封面不需要任何额外权限,只需要正确授权用户即可。
  • 试试这个:String URL = "graph.facebook.com" + THE_USER_ID + "?fields=cover&access_token=" + facebook access_token from here stackoverflow.com/questions/12434261/…
  • @ItzikSamara 已经尝试过了,但我得到以下信息:不允许使用全局 ID 100......035。请改用应用程序特定 ID。

标签: android facebook image sdk parse-platform


【解决方案1】:

花了很多时间寻找答案,我终于明白了!!!

用于 Facebook 文档的 Android SDK,太没用了。

要解决这个问题,我们只需要在第二个参数中设置 Graph Path 和一个带有字段的 Bundle 作为第三个参数。示例:

Bundle params = new Bundle();
            params.putString("fields", "cover");
            new Request(ParseFacebookUtils.getSession(),
                    "me",
                    params,
                    HttpMethod.GET,
                    new Request.Callback() {
                        @Override
                        public void onCompleted(Response response) {
                            //code...
                        }
                    }).executeAsync();

然后我们可以用

将 onCompleted 中返回的响应对象解析为 JSON
response.getGraphObject().getInnerJsonObject();
//or
response.getGraphObject().getProperty("cover");

来源:New Facebook SDK and OAuthException in Graphpath requests 感谢@Jesse Chen

【讨论】:

    【解决方案2】:

    Facebook 改变了一些东西并且有一些糟糕的文档。希望这对其他人有帮助,这对我有用。

    public void getCoverPhotoFB(final String email, AccessToken accessToken){
    
        if(!AccessToken.getCurrentAccessToken().getPermissions().contains("user_photos")) {
            Log.e(L, "getCoverPhotoFB....get user_photo permission");
            LoginManager.getInstance().logInWithReadPermissions(
                    this,
                    Arrays.asList("user_photos"));
        }
    
        ////
    
        Bundle params = new Bundle();
        params.putBoolean("redirect", false);
        params.putString("fields", "cover");
    new GraphRequest(
            accessToken,
            "me",
            params,
            HttpMethod.GET,
            new GraphRequest.Callback() {
                public void onCompleted(final GraphResponse response) {
                    Log.e(L, "getCoverPhotoFB..."+response);
    
                    // thread is necessary for network call
                    Thread thread = new Thread(new Runnable() {
                        @Override
                        public void run() {
    
                            try {
    
                                String picUrlString = (String) response.getJSONObject().getJSONObject("cover").get("source");
                                Log.d(L,"getCoverPhotoFB.....picURLString....."+picUrlString);
                                URL img_value = new URL(picUrlString);
                                Bitmap eventBitmap = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
                                saveImageToExternalStorage(eventBitmap, email + "_B.png");
    
    
                                homeProfile(profile, email);
    
    
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                        }
                    });
                    thread.start();
                    }
    
                }
        ).executeAsync();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      相关资源
      最近更新 更多