Android Facebook SDK AccessToken 问题

Android Facebook SDK AcccessToken problems

我尝试通过 AccessToken 获取用户 email,我从 Facebook SDK

获取
  1. 如果我使用Graph API ExplorerAccessToken我可以得到idnameemail没关系我使用浏览器或 OkHttp:

    "https://graph.facebook.com/" + user_id + "?fields=email,name&access_token=" + access_token_from_graph_explorer

我得到这样的回应:

 {
      "email": "mail@com",
      "name": "John Doe",
      "id": "4545"
}

如果我使用 AccessToken.getCurrentAccessToken().getToken() 方法获取的 token,我不会在 JSONObject 中得到 email

  1. 使用 Graph Explorer 我可以看到我的 id。我试图以这种方式提出请求:

"https://graph.facebook.com/me?fields=email,name&access_token="

还有这个:

"https://graph.facebook.com/" + id + "?fields=email,name&access_token="

在第二种变体中,我 "Unsupported get request. Object with ID 'xxxxxxxxxxx' does not exist, cannot be loaded due to missing permissions...,同时使用我的 id。当我尝试使用另一个 userid 时,我仍然没有得到 email.

Bundle bundle = new Bundle();
            bundle.putString("fields", "email,name");
            new GraphRequest(
                    AccessToken.getCurrentAccessToken(),
                    "me",
                    bundle,
                    HttpMethod.GET,
                    new GraphRequest.Callback() {
                        public void onCompleted(GraphResponse response) {
                            System.out.println("data = " + response.toString());
                        }
                    }
            ).executeAsync();

使用这个变体我也没有达到 email

我很困惑。告诉我,如何检索用户电子邮件。

3.After登录我试试:

public void onSuccess(LoginResult loginResult) {
            System.out.println("succses =" + loginResult.getAccessToken().getToken());
            accessToken = loginResult.getAccessToken();

            GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                    Log.d("TAG", user.optString("email"));
                    Log.d("TAG", user.optString("name"));
                    Log.d("TAG", user.optString("id"));
                    init();
                }
            }).executeAsync();
        }

但我没有看到 TAG 有电子邮件 P.S。 graph explorer 中的所有权限均已开启。

投票最高的答案对我不起作用,电子邮件总是空的。我在

上找到了答案
LoginManager.getInstance().registerCallback(mCallbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object,GraphResponse response) {

                            JSONObject json = response.getJSONObject();
                            try {
                                if(json != null){
                                    String text = json.getString("email");
                                    Log.d("email",text);

                                }

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", "id,name,link,email,picture");
                    request.setParameters(parameters);
                    request.executeAsync();

                }

                @Override
                public void onCancel() {
                    // App code
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                }
            });