Facebook登录java应用程序并获取用户的基本信息

时间:2015-05-27 05:52:16

标签: java facebook facebook-graph-api servlets

我正在尝试在我的java应用程序中实现facebook登录。直到现在点击按钮我已经调用了servlet,根据客户端ID和密钥生成代码并将其重定向到重定向uri。我在facebook开发者控制台上注册了我的测试应用程序。 问题是代码生成完美但是没有生成访问令牌,我将获得基本信息。我尝试了很多代码。其中一个在下面。 客户端

google.addClickHandler(new ClickHandler()
  {

    @Override
    public void onClick(ClickEvent event) {

        String fbURL = "http://www.facebook.com/dialog/oauth?client_id=CLIENTID&redirect_uri=REDIRECT  URL &scope=email&scope=user_friends";
          Window.open(fbURL,"_blank","");


    }
});

SERVLET

 public userInfoServlet() {
    super();

}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    try {
        PrintWriter out = response.getWriter();
        String rid = request.getParameter("request_ids");
        if (rid != null) {
            response.sendRedirect("https://www.facebook.com/dialog/oauth?client_id="
                    + clientID + "&redirect_uri=" + redirectURI);
        } else {
            // Get code
            String code = request.getParameter("code");
            if (code != null) {

                // Format parameters
                URL url = new URL(
                        "https://graph.facebook.com/oauth/access_token?client_id="
                                + clientID + "&redirect_uri=" + redirectURI
                                + "&client_secret=" + clientSecret
                                + "&code=" + code);

                // request for Access Token
                HttpURLConnection conn = (HttpURLConnection) url
                        .openConnection();
                conn.setRequestMethod("GET");
                String line, outputString = "";
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
                while ((line = reader.readLine()) != null) {
                    outputString += line;
                }
                out.println(outputString);

                // extract access token from response
                String accessToken = null;
                if(outputString.indexOf("access_token")!=-1) {
                    accessToken = outputString.substring(13,outputString.indexOf("&"));
                }

                // request for user info
                url = new URL("https://graph.facebook.com/me?access_token="
                        + accessToken);
                out.println(url);
                URLConnection conn1 = url.openConnection();
                outputString = "";
                reader = new BufferedReader(new InputStreamReader(
                        conn1.getInputStream()));
                while ((line = reader.readLine()) != null) {
                    outputString += line;
                }
                reader.close();
                out.println(outputString);

                // convert response JSON to Pojo class
              FaceBookPojo fbp = new Gson().fromJson(outputString,
                       FaceBookPojo.class);
                out.println(fbp);
                                }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

我没有得到生成访问令牌的确切问题。任何帮助都会很明显。

tried this code also but the problem is same

1 个答案:

答案 0 :(得分:0)

您的req中有多个范围参数。它应该只有一个。

试试这个,

google.addClickHandler(new ClickHandler()   {

@Override
public void onClick(ClickEvent event) {
    String fbURL = "http://www.facebook.com/dialog/oauth?client_id=CLIENTID&redirect_uri=REDIRECT  URL &scope=email,user_friends";
      Window.open(fbURL,"_blank","");
    }
});

它应该有用。

相关问题