Java restFB生成的令牌是否真实?

Java restFB生成的令牌是否真实?,java,facebook-graph-api,restfb,Java,Facebook Graph Api,Restfb,我与restFB合作,调用FaceBook Graph api登录、获取用户帖子等 在Facebook的开发者帐户中创建了一个应用程序 尝试调用用户详细信息,此处生成令牌, https://developers.facebook.com/tools/explorer?method=GET&path=8560751784547897&version=v2.8 例如:来自上述url的accessToken提供=EAA….F 当我点击浏览器中的url时,我能够获得所有用户的详细信息,如下所示:, ht

我与restFB合作,调用FaceBook Graph api登录、获取用户帖子等

在Facebook的开发者帐户中创建了一个应用程序

尝试调用用户详细信息,此处生成令牌,
https://developers.facebook.com/tools/explorer?method=GET&path=8560751784547897&version=v2.8

例如:来自上述url的accessToken提供=
EAA….F

当我点击浏览器中的url时,我能够获得所有用户的详细信息,如下所示:,
https://graph.facebook.com/v2.8/me?fields=id,姓名,电子邮件,生日?访问\u令牌=EAA…f

我在浏览器中得到以下响应:

{
   "id": "1127949",
   "name": "youtr name",
   "email": "youmail\u0040gmail.com"
   "birthday": "10/27/1998"
}
我使用以下代码动态生成accesstoken

        StringBuffer callbackURLbuffer = request.getRequestURL();
        int index = callbackURLbuffer.lastIndexOf("/");
        callbackURLbuffer.replace(index, callbackURLbuffer.length(), "").append("/callback");
        callbackURL = URLEncoder.encode(callbackURLbuffer.toString(), "UTF-8");

        String authURL = "https://graph.facebook.com/oauth/authorize?client_id="
                + facebookAppId
                + "&redirect_uri="
                + callbackURL
                + "&scope=user_about_me,"
                + "user_actions.books,user_actions.fitness,user_actions.music,user_actions.news,user_actions.video,user_activities,user_birthday,user_education_history,"
                + "user_events,user_photos,user_friends,user_games_activity,user_groups,user_hometown,user_interests,user_likes,user_location,user_photos,user_relationship_details,"
                + "user_relationships,user_religion_politics,user_status,user_tagged_places,user_videos,user_website,user_work_history,ads_management,ads_read,email,"
                + "manage_notifications,manage_pages,publish_actions,read_friendlists,read_insights,read_mailbox,read_page_mailboxes,read_stream,rsvp_event";
在我的callbackURL servlet中,我获得了带有
code
值的accessToken,如下所示

        StringBuffer redirectURLbuffer = request.getRequestURL();
        int index = redirectURLbuffer.lastIndexOf("/");
        redirectURLbuffer.replace(index, redirectURLbuffer.length(), "").append("/callback");
        redirectURL = URLEncoder.encode(redirectURLbuffer.toString(), "UTF-8");

        code = request.getParameter("code");
        if(null!=code) {
            accessURL = "https://graph.facebook.com/oauth/access_token?client_id=" + facebookAppId + 
                    "&redirect_uri=" + redirectURL + "&client_secret=" + facebookAppSecret + "&code=" + code;
            webContent = getWebContentFromURL(accessURL);
            accessToken = getAccessTokenFromWebContent(webContent);
{
  "error": {
  "message": "(#12) bio field is deprecated for versions v2.8 and higher",
  "type": "OAuthException",
  "code": 12,
  "fbtrace_id": "ARkoFJVP/Jk"
   }
}
用于上述代码的其他函数

private static String getWebContentFromURL(String webnames) {
    try {
        URL url = new URL(webnames);
        URLConnection urlc = url.openConnection();
        //BufferedInputStream buffer = new BufferedInputStream(urlc.getInputStream());
        BufferedReader buffer = new BufferedReader(new InputStreamReader(urlc.getInputStream(), "UTF8"));
        StringBuffer builder = new StringBuffer();
        int byteRead;
        while ((byteRead = buffer.read()) != -1)
            builder.append((char) byteRead);
        buffer.close();
        String text=builder.toString();
        return text;
    } 
    catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
以及

假设这个accessToken=
EAA….2

如果我用这个令牌调用下面的url,
https://graph.facebook.com/v2.8/me?fields=id、姓名、电子邮件、生日和访问权\u token=EAA….2

我得到了如下回应:

{
   "id": "1127949",
   "name": "youtr name",
   "email": "youmail\u0040gmail.com"
}
如果我用bio feild点击下面的url,我会在json中得到错误消息,如下所示

        StringBuffer redirectURLbuffer = request.getRequestURL();
        int index = redirectURLbuffer.lastIndexOf("/");
        redirectURLbuffer.replace(index, redirectURLbuffer.length(), "").append("/callback");
        redirectURL = URLEncoder.encode(redirectURLbuffer.toString(), "UTF-8");

        code = request.getParameter("code");
        if(null!=code) {
            accessURL = "https://graph.facebook.com/oauth/access_token?client_id=" + facebookAppId + 
                    "&redirect_uri=" + redirectURL + "&client_secret=" + facebookAppSecret + "&code=" + code;
            webContent = getWebContentFromURL(accessURL);
            accessToken = getAccessTokenFromWebContent(webContent);
{
  "error": {
  "message": "(#12) bio field is deprecated for versions v2.8 and higher",
  "type": "OAuthException",
  "code": 12,
  "fbtrace_id": "ARkoFJVP/Jk"
   }
}

有人能告诉我为什么会这样吗

看看这里,了解一下用户权限

根据您的评论,关于debuggin您的令牌,听起来您没有通过facebook为
user\u about\u me
启用权限

你必须向Facebook发送关于你的应用的评论,并且需要得到Facebook的批准,然后只有你才能访问用户详细信息和其他内容

按照这些步骤,
  • 转到-

  • 单击开始提交按钮

  • 选中您需要的权限复选框。然后单击添加项目按钮

  • 然后单击每个权限的“编辑注释”

  • 在这里,请使用此权限了解您的应用程序,并上传应用程序演示的视频

  • Facebook将对其进行审查,并根据规范接受/拒绝


  • 这就是您缺少的内容,也是您的问题的原因。

    只需使用
    about
    而不是
    bio
    。@CBroe已经使用了它,但是没有值显示您的访问令牌包含
    用户关于我的权限,您在访问令牌调试器中检查了它?@Norbert,在我的令牌调试中,
    user\u about\u me
    没有作用域,这至少解释了为什么
    about
    字段没有值。是的,这就是我留下的,忘了添加我的答案