如何在GraphRequest.newMeRequest上获取用户电子邮件

cor*_*iro 6 java android facebook facebook-graph-api parse-platform

我的Android应用程序中有一个Facebook登录选项,我试图让用户的电子邮件失败.用户登录后,并添加到Parse.com用户表(带有有效的访问令牌),我请求Facebook用户信息,但只获取它的ID和名称(即使该电子邮件被设置为其中一个权限).

这是我的代码(在我的按钮的OnClickListener中):

ParseFacebookUtils.logInWithReadPermissionsInBackground(
    getActivity(), Arrays.asList("email", "user_friends"), new LogInCallback() {
        @Override
        public void done(ParseUser user, ParseException err) {
            //err is null

            if (user == null) {
                Log.d(TAG, "Uh oh. The user cancelled the Facebook login.");
            } else {
                GraphRequest.newMeRequest(
                    AccessToken.getCurrentAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject user, GraphResponse response) {

                            Log.d(TAG, "user = " + user.toString());
                            //prints -> user = {"name":"my_fb_name","id":"my_fb_id"}
                        }
                    }
                ).executeAsync();                
           }
       });
Run Code Online (Sandbox Code Playgroud)

Tob*_*obi 26

我想这与Graph API v2.4中的更改有关,因此您必须指定要从Graph API返回的每个字段.

看看我的回答

对此

关于你的实际问题,请参阅

有关如何为a指定字段的示例 GraphRequest

GraphRequest request = GraphRequest.newMeRequest(
        accessToken,
        new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
                   JSONObject object,
                   GraphResponse response) {
                // Application code
            }
        });
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的问题!事实上,由于Graph API和缺少的"email"字段的变化.谢谢您的帮助 (2认同)